2010-06-30 100 views
149

我有哪些呢等到過程結束

Process.Start() 

啓動另一個應用程序「ABC」的應用程序。我想等到應用程序結束(進程中止)並繼續執行。我該怎麼做?

可能有多個應用程序「ABC」同時運行的實例。

回答

306

我覺得你只是想這樣的:

var process = Process.Start(...); 
process.WaitForExit(); 

的方法見MSDN page。它也有超載的地方,你可以指定超時時間,所以你不會永遠等待。

113

使用Process.WaitForExit?或者如果您不想阻止,請訂閱Process.Exited活動?如果這不符合你的要求,請給我們更多關於你的要求的信息。

+26

+1的事件。 – NLV 2010-06-30 09:26:53

+1

使+1 ++ :) – Apelsin 2013-05-24 06:04:47

+0

絕對好的信息Process.Exited,但OP確實說「等待」 – 2014-06-25 18:07:34

14

你可以使用等待退出,或者你可以趕上HasExited財產和更新用戶界面,使用戶「通知」(期望管理):

System.Diagnostics.Process process = System.Diagnostics.Process.Start("cmd.exe"); 
while (!process.HasExited) 
{ 
    //update UI 
} 
//done 
29

我做我的應用程序如下:

Process process = new Process(); 
process.StartInfo.FileName = executable; 
process.StartInfo.Arguments = arguments; 
process.StartInfo.ErrorDialog = true; 
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; 
process.Start(); 
process.WaitForExit(1000 * 60 * 5); // Wait up to five minutes. 

裏面還有一些額外的功能,你可能會發現有用...

+1

否「它也適用於......」 – AnthonyLambert 2013-08-28 13:42:55

-5

試試這個:

string command = "..."; 
var process = Process.Start(command); 
process.WaitForExit(); 
+4

對已回答的已回答問題的答案的評論有什麼意見?你不僅浪費了你自己的週期,而且還迫使我浪費我的週期。 – 2015-07-01 13:53:40

+0

@AdamBilinski問題和答案旨在讓其他人不僅有問題的人可以看到問題 – L3n 2015-07-23 23:07:19

+4

@ L3n我同意,但這個答案與接受的答案完全相同,因此它毫無意義! – 2015-07-24 08:55:58

4

我有一個案例,Process.HasExited在關閉屬於該進程的窗口後沒有改變。所以Process.WaitForExit()也沒有工作。我不得不監測Process.Responding那去假關閉窗口一樣,後:

while (!_process.HasExited && _process.Responding) { 
    Thread.Sleep(100); 
} 
... 

也許這可以幫助別人。

0

像喬恩斯基特說,使用Process.Exited

proc.StartInfo.FileName = exportPath + @"\" + fileExe; 
proc.Exited += new EventHandler(myProcess_Exited); 
proc.Start(); 
inProcess = true; 

while (inProcess) 
{ 
    proc.Refresh(); 
    System.Threading.Thread.Sleep(10); 
    if (proc.HasExited) 
    { 
     inProcess = false; 
    } 
} 

private void myProcess_Exited(object sender, System.EventArgs e) 
{ 
    inProcess = false; 
    Console.WriteLine("Exit time: {0}\r\n" + 
     "Exit code: {1}\r\n", proc.ExitTime, proc.ExitCode); 
} 
+0

沒有真正回答這個問題。請優化您的答案以解決問題 – Grantly 2017-11-24 16:24:31

+0

現在呢?也許打開VB並做出解決方案;) – 2017-11-24 18:17:06