2011-03-22 154 views
0

我在写一个应用程序时遇到了一个奇怪的问题。Process.Start有时需要很长时间才能返回

它读取主XML配置文件,为用户创建本地副本,然后执行一些操作,如xml文件中所示。它检查本地xml文件是否需要更新,因此不需要每次都这样做。

每个操作都在一个新线程中运行,一旦所有线程完成,它就会写入一个日志并通知用户其完成。

其中一个操作是将.reg文件导入到注册表中。我这样做,就像这样:

Process regeditProcess = Process.Start("regedit.exe", "/s " + RegFilePath); 
regeditProcess.WaitForExit(); 
regeditProcess.Close(); 

我的问题是,如果应用程序创建一个新的配置文件,然后注册表编辑过程可能需要任何东西长达30秒。如果它不创建一个,那么它在一秒钟内完成。

在这种检查线程完成循环,我已经把一个

Application.DoEvents(); 

如果我不这样做,注册表编辑过程中运行,如果我等待足够长,我收到了ContextSwitchDeadlock是检测到来自调试器的错误。我试过使用不同的.reg文件,只运行这一个动作,但仍然是相同的。

在任何动作尝试之前,主工作线程中都会创建xml文件,但我确定这对它有一些影响,我只是不确定是什么。

我知道它有点奇怪的场景,但是有没有人打过类似的东西?

+1

为什么不使用注册表类? http://msdn.microsoft.com/en-us/library/microsoft.win32.registry.aspx – 2011-03-22 23:02:29

+0

有很多设置,如果它们位于将它们编码到应用程序中的文件中,easyer就会更改它 – beakersoft 2011-03-22 23:51:04

回答

0

是否在创建配置文件后显式关闭文件编写器对象?如果没有,您可能会锁定该文件,阻止您的工作人员访问。

+0

Im不使用一个写入器对象来创建XML文件我创建一个XML文件,并保存到一个文件,当它完成 – beakersoft 2011-03-22 23:52:28

相关问题