记录大目录中的所有文件

时间:2009-01-22 09:51:14

标签: c# .net multithreading directoryinfo

我有很多目录中包含大量文件(~10,000)。我想在我的应用程序中创建这些文件的列表,并且已经对io访问进行了线程化,以便应用程序在加载时不会冻结。但是,如果我在加载所有文件之前退出应用程序,则在完成对dirInfo.GetFiles(...)的调用之前,线程不会响应.Join():

// ... mythread
    DirectoryInfo dirInfo = new DirectoryInfo(path);
    foreach(FileINfo file in dirInfo.GetFiles(extension)) 
    {
        // with large directories, the GetFiles call above 
        //    can stall for a long time
        ...

将文件缓存出foreach只会移动问题。我需要某种线程,回调方式来查找目录中的文件,我不知道该怎么做。任何帮助将不胜感激。

非常感谢, tenpn。

2 个答案:

答案 0 :(得分:1)

您应该使用ThreadPool类中的Thread。这将使它成为后台线程,它应该在应用程序关闭时收到ThreadInteruptException。

答案 1 :(得分:0)

您可以在应用程序即将关闭时(在加入之前)调用Thread.Abort()

myThread.Abort();
// Wait for myThread to end.
myThread.Join();

此外,您可能希望捕获线程方法中的ThreadAbortException并在必要时进行一些终结/清理。

try {
    DirectoryInfo dirInfo = new DirectoryInfo(path);
    foreach(FileINfo file in dirInfo.GetFiles(extension)) 
    {
        // with large directories, the GetFiles call above 
        //    can stall for a long time
        ...
    }
}
catch (ThreadAbortException e)
{
    // cleaning
}