我在写作的应用程序中遇到了一个奇怪的问题。
它读取主xml配置文件,为用户创建本地副本,然后执行xml文件中列出的某些操作。它会检查本地xml文件是否需要更新,因此不需要每次都进行更新。
每个操作都在一个新线程中运行,一旦所有线程完成,它就会写一个日志并告知用户它已完成。
其中一个操作是将.reg文件导入注册表。我这样做是这样的:
Process regeditProcess = Process.Start("regedit.exe", "/s " + RegFilePath);
regeditProcess.WaitForExit();
regeditProcess.Close();
我遇到的问题是,如果应用程序创建了一个新的配置文件,那么regedit进程可能需要长达30秒的时间。如果它没有创建一个,那么它会在一秒钟内完成。
在检查线程的循环中,我已经放了一个
Application.DoEvents();
如果我不这样做,regedit进程将运行,如果我等待足够长的时间,我会从调试器中检测到ContextSwitchDeadlock错误。我尝试过使用不同的.reg文件,只运行这一个动作,但仍然是相同的。
在尝试任何操作之前,xml文件的创建发生在主工作线程中,但我确定这会对它产生一些影响,我只是不确定是什么。
我知道这有点奇怪,但是之前有人打过这样的事吗?
答案 0 :(得分:0)
您是否在创建配置文件后明确关闭文件编写器对象?如果没有,您可能会锁定文件,阻止您的工作人员访问。
答案 1 :(得分:0)
我已经解决了问题所在,我在Program.cs中有了STAThread指令。一旦我把它拿出来,它就会得到一种享受。
http://ilvyanyatka.spaces.live.com/blog/cns!EA0C02AB2E2FCFAC!193.entry?wa=wsignin1.0&sa=143328961