在C#中使用Directory.GetFiles(),有没有办法在找到文件时启动线程而不必等待?

Mat*_*att 1 .net c# filesystems

在C#中使用Directory.GetFiles(),有没有办法在找到文件时启动线程?

行为似乎是"找到所有文件"然后在每个文件上执行您需要的操作.是否有另一个类允许一个人在找到文件时启动线程(达到一定数量)?

SLa*_*aks 5

你需要打电话Directory.EnumerateFiles,这是.Net 4.0的新手.

这个方法返回一个懒惰的可枚举; 每次调用时MoveNext(),它都会在文件系统中查询下一个文件.

你可以像这样开始你的线程:

foreach(var dontUse in Directory.EnumerateFiles(...)) {
    string path = dontUse;  //Create a new variable for each closure
    ThreadPool.QueueUserWorkItem(delegate {
        ...
    });
}
Run Code Online (Sandbox Code Playgroud)

临时变量是确保每个委托闭包引用单独变量所必需的; 否则,他们都会分享相同的价值,造成麻烦.