私はするアプリケーションを持っています
Process.Start()
別のアプリケーション「ABC」を開始します。そのアプリケーションが終了するまで(プロセスが停止するまで)待機し、実行を継続します。どうすればいいですか?
アプリケーション「ABC」の複数のインスタンスが同時に実行されている場合があります。
あなたはこれが欲しいと思う:
var process = Process.Start(...);
process.WaitForExit();
メソッドについては MSDNページ を参照してください。また、タイムアウトを指定できるオーバーロードがあるため、潜在的に永遠に待機することはありません。
Process.WaitForExit
?を使用しますまたは、ブロックしたくない場合は Process.Exited
イベントにサブスクライブしますか?それでも問題が解決しない場合は、要件に関する詳細をお知らせください。
私は自分のアプリケーションで次のことを行います。
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.
便利な機能がいくつかあります...
終了の待機を使用するか、HasExitedプロパティをキャッチしてUIを更新し、ユーザーに「情報」を提供します(期待値管理)。
System.Diagnostics.Process process = System.Diagnostics.Process.Start("cmd.exe");
while (!process.HasExited)
{
//update UI
}
//done
プロセスに属するウィンドウを閉じた後、Process.HasExited
が変更されない場合がありました。したがって、Process.WaitForExit()
も機能しませんでした。そのようなウィンドウを閉じた後にfalseになったProcess.Responding
を監視する必要がありました。
while (!_process.HasExited && _process.Responding) {
Thread.Sleep(100);
}
...
おそらくこれは誰かを助ける。
Process.WaitForExit は、まさにあなたが探しているものだと思います。
ジョンスキートが言うように、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);
}