나는 응용 프로그램을 가지고
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()
작동하지 않았습니다. 나는 Process.Responding
창문을 닫은 후 거짓으로 된 것을 모니터링 해야했습니다.
while (!_process.HasExited && _process.Responding) {
Thread.Sleep(100);
}
...
아마도 이것은 누군가를 도울 것입니다.
답변
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}");
}