2010-06-30 64 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