2011-03-22 159 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

相關問題