C# 记录大目录中的所有文件
我有许多目录,其中包含大量文件(~10000)。我想在我的应用程序中创建这些文件的列表,并且已经将io访问线程化,这样应用程序在加载时不会冻结。但是,如果在加载所有文件之前退出应用程序,则在完成对dirInfo.GetFiles(…)的调用之前,线程不会响应.Join()C# 记录大目录中的所有文件,c#,.net,multithreading,directoryinfo,C#,.net,Multithreading,Directoryinfo,我有许多目录,其中包含大量文件(~10000)。我想在我的应用程序中创建这些文件的列表,并且已经将io访问线程化,这样应用程序在加载时不会冻结。但是,如果在加载所有文件之前退出应用程序,则在完成对dirInfo.GetFiles(…)的调用之前,线程不会响应.Join() // ... mythread DirectoryInfo dirInfo = new DirectoryInfo(path); foreach(FileINfo file in dirInfo.GetFile
// ... 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.您应该使用ThreadPool类中的线程。这将使其成为后台线程,当应用程序关闭时,它将收到ThreadInterupException。您应该使用ThreadPool类中的线程。这将使其成为后台线程,当应用程序关闭时,它将收到ThreadInterupException。您可以在应用程序即将关闭时(加入之前)调用 此外,您可能希望在thread方法中捕获
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
}
您可以在应用程序即将关闭(加入之前)时调用
此外,您可能希望在thread方法中捕获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
}
我认为这并不能解决问题。。。只有当工作线程进入WaitSleepJoin状态时,ThreadInterruptedException才会引发。因此,在这种情况下,只有当dirInfo.GetFiles完成时才能抛出异常。我认为这并不能解决问题。。。只有当工作线程进入WaitSleepJoin状态时,ThreadInterruptedException才会引发。因此,在本例中,只有在dirInfo.GetFiles完成时才能引发异常。