2009-08-14 93 views

回答

2

請閱讀http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx。過程啓動後,Process.Start將返回。如果你想等到進程退出,那麼你需要調用WaitForExit。

請注意,如果您重定向StandardOutput和StandardError並調用WaitForExit,則存在潛在的死鎖問題。如果您沒有讀取StandardOutput和StandardError的流,那麼緩衝區可以填充並且進程將被阻塞。因此WaitForExit永遠不會返回。通常的解決方案是對線程池線程中的StandardOutput和StandardError調用ReadToEnd,並在主線程上調用WaitForExit。

+0

在調用Process.Start()之後調用Process.GetProcessById(PID)是否安全?我的意思是,我保證GetProcessById會一直返回正確的結果嗎?當然,假設啓動過程在啓動 – Adi 2012-08-22 10:05:18

+0

道歉後沒有立即關閉,我現在只看到了這條評論。遲到1年仍然有用,對吧?無論如何,Process.Start之後的GetProcessById應該沒問題,但是現在有一個競爭條件,並且在調用GetProcessById之前依賴於該過程尚未完成。在調用GetProcessById之前,它可能會完成而不會失敗。但更重要的是,如果您使用Process.Start啓動流程,它會將Process對象返回給您 - 您無需從GetProcessById中獲取它。在這種情況下,您仍然可以在Process對象完成後詢問它們(例如退出代碼)。 – 2013-10-14 00:04:57

0

一旦Process.Start啓動的應用程序啓動(或啓動失敗),控制權就會返回到您的應用程序。