我从网上打了这个子网,以递归方式搜索所有文件,包括子目录
如果我将此子指向大区域(即mydocuments或C :),我会收到错误:
CLR无法过渡 从COM上下文0x1f6c48到COM 上下文0x1f6db8持续60秒。该 拥有目的地的线程 上下文/公寓是最有可能的 或者做一次非抽水等待或者 处理很长时间 没有泵Windows的操作 消息。这种情况一般都有 负面的业绩影响和可能 甚至导致应用程序成为 无响应或内存使用 随着时间的推移不断积累。至 一切都避免这个问题 线程公寓(STA)线程 应该使用抽等待原语 (例如CoWaitForMultipleHandles)和 经常在长时间内发送消息 正在运行。
这是代码 (我相信它是因为潜意识自己)
void DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d))
{
string hash = GetMD5HashFromFile(f);
Dic_Files.Add(f, hash);
}
DirSearch(d);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
答案 0 :(得分:1)
GetFiles方法具有允许递归搜索的覆盖。我会尝试使用它,看看你的问题是否消失......
void DirSearch(string sDir)
{
try
{
var files = System.IO.Directory.GetFiles(sDir, "*.*", SearchOption.AllDirectories);
foreach (string f in files)
{
string hash = GetMD5HashFromFile(f);
Dic_Files.Add(f, hash);
}
}
catch (System.Exception excpt)
{
Console.WriteLine(excpt.Message);
}
}
答案 1 :(得分:0)
尝试在单独的线程中运行该代码,以便在搜索期间不会阻止UI。 BackgroundWorker是最简单的方法。
答案 2 :(得分:0)
不使用递归函数,只需使用Directory.GetFiles的重载之一
Directory.GetFiles(sdir, null, SearchOption.AllDirectories);
答案 3 :(得分:0)
调试问题。
根据:http://social.msdn.microsoft.com/forums/en-US/vsdebug/thread/ed6db6c8-3cdc-4a23-ab0a-2f9b32470d35/
您所看到的是“托管调试助手”(MDA)之一,可以通过Debug-> Exceptions ...>禁用。展开MDA节点并取消选中contextswitchdeadlock的框。