我有很多目录中包含大量文件(~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。
答案 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
}