回答:
使用しProcess.WaitForExit
ますか?またはProcess.Exited
、ブロックしたくない場合は、イベントをサブスクライブしますか?それでも問題が解決しない場合は、要件の詳細をお知らせください。
WaitForExit
最初に参照した理由です...場合によっては、何かが終了したときにさらに多くのコードを実行したい場合がありますが、それは現在のスレッドをブロックする必要があるという意味ではありません。
Process.Exited
イベントを使用する場合は、Process.EnableRaisingEvents
trueに設定してプロセスを事前に構成する必要があると思います。この質問は3年以上前Process.EnableRaisingEvents
のものであることを考えると、質問された時点ではそれは問題ではなかった可能性があります。
Process.Exited
イベントの名前を探して、このページに巻き込みました。ありがとう!完全性のための+1
アプリケーションで次のことを行います。
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.
便利な機能がいくつかあります...
Process.WaitForExitは、まさに私が探しているものでなければなりません。
Microsoftの例を参照:[ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
設定するのが最善でしょう:
myProcess.EnableRaisingEvents = true;
それ以外の場合、コードはブロックされます。また、追加のプロパティは必要ありません。
// Start a process and raise an event when done.
myProcess.StartInfo.FileName = fileName;
// Allows to raise event when the process is finished
myProcess.EnableRaisingEvents = true;
// Eventhandler wich fires when exited
myProcess.Exited += new EventHandler(myProcess_Exited);
// Starts the process
myProcess.Start();
// Handle Exited event and display process information.
private void myProcess_Exited(object sender, System.EventArgs e)
{
Console.WriteLine(
$"Exit time : {myProcess.ExitTime}\n" +
$"Exit code : {myProcess.ExitCode}\n" +
$"Elapsed time : {elapsedTime}");
}
ジョンスキートが言うように、使用します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);
}
これを試して:
string command = "...";
var process = Process.Start(command);
process.WaitForExit();