【发布时间】:2016-02-10 18:43:19
【问题描述】:
我有这个函数,它接受一个路径并在其中搜索一个文件。我有两种方法:一种是让主线程完成工作,另一种是让工作线程完成工作。当主线程完成工作时,它返回所有文件,但当工作线程完成工作时,它只返回该路径中的少量文件。它不执行进入子目录的递归步骤。代码如下:
public void GetAllFiles(string sdir)
{
foreach (string dir in Directory.GetDirectories(sdir))
{
try
{
foreach (string file in Directory.GetFiles(dir, "*.*"))
{
string filename = Path.GetFileName(file);
listView1.Items.Add(filename);
}
GetAllFiles(dir);
}
catch (Exception error)
{
Console.WriteLine(error.Message);
}
}
}
这是我调用线程的方式:
Thread thread = new Thread(() => GetAllFiles("C:\\Users\\modz\\Desktop\\games"));
thread.Start();
【问题讨论】:
-
问题是什么?
-
@ScottHunter 我需要知道是什么原因造成的,但我认为这是递归
-
我怀疑您收到了错误消息。这是因为您试图将项目添加到 ListView 对象。这在创建 ListView 的线程以外的任何线程上均无效。您是否检查过控制台是否写入了任何错误?
-
我有多愚蠢@JeremyWest 你是对的,错误是因为列表视图,但你能告诉我如何将结果发送回主踏板吗?
-
不要自己遍历文件系统;
Directory类具有获取目录中任何深度的所有文件的方法。就用那个吧。
标签: c# multithreading recursion