1

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

// ... 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。

4

2 回答 2

1

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

于 2009-01-22T10:09:09.140 回答
0

当您的应用程序即将关闭时(在Join之前),您可以调用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
}
于 2009-01-22T10:59:08.523 回答