답변:
사용 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}");
}
Jon Skeet이 말했듯이 다음을 사용하십시오 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();