等到过程结束

NLV*_*NLV 194 .net c# process

我有一个应用程序

Process.Start()
Run Code Online (Sandbox Code Playgroud)

启动另一个应用程序'ABC'.我想等到应用程序结束(进程死机)并继续执行.我该怎么做?

应用程序"ABC"可能有多个实例同时运行.

Nol*_*rin 384

我想你只想要这个:

Process.Start(...);
Process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

有关该方法,请参阅MSDN页面.它也有一个过载,你可以指定超时,所以你不可能永远等待.


Jon*_*eet 133

Process.WaitForExit吗?Process.Exited如果您不想阻止,请订阅该活动?如果这不符合您的要求,请向我们提供有关您的要求的更多信息.

  • @MikeM:这就是为什么我首先提到`WaitForExit` ...在某些情况下你可能想要在完成某些事情时执行更多代码,但这并不意味着你需要阻止当前线程. (8认同)
  • 如果您要使用`Process.Exited`事件,我相信您必须事先通过将`Process.EnableRaisingEvents`设置为true来配置该过程.虽然,考虑到这个问题已经超过三年,但可能是"Process.EnableRaisingEvents"在被问到时并不是一件事. (6认同)

Ant*_*ert 35

我在我的应用程序中执行以下操作:

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.
Run Code Online (Sandbox Code Playgroud)

有一些额外的功能,你可能会发现有用...


小智 16

您可以使用wait for exit或者您可以捕获HasExited属性并更新您的UI以保持用户"通知"(期望管理):

System.Diagnostics.Process process = System.Diagnostics.Process.Start("cmd.exe");
while (!process.HasExited)
{
    //update UI
}
//done
Run Code Online (Sandbox Code Playgroud)


Buk*_*uka 9

我有一个案例,Process.HasExited在关闭属于该过程的窗口后没有改变.所以Process.WaitForExit()也没用.Process.Responding关闭窗口之后我必须监视那个变为错误:

while (!_process.HasExited && _process.Responding) {
  Thread.Sleep(100);
}
...
Run Code Online (Sandbox Code Playgroud)

也许这有助于某人.


Han*_*son 6

我认为Process.WaitForExit应该是您正在寻找的东西.