[c#] 내 프로세스의 Exited 메서드가 호출되지 않는 이유는 무엇입니까?

다음 코드가 있지만 ProcessExited메서드가 호출되지 않는 이유는 무엇입니까? Windows 셸 ( startInfo.UseShellExecute = false)을 사용하지 않아도 동일합니다 .

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = path;
startInfo.Arguments = rawDataFileName;
startInfo.WorkingDirectory = Util.GetParentDirectory(path, 1);

try
{
     Process correctionProcess = Process.Start(startInfo);
     correctionProcess.Exited += new EventHandler(ProcessExited);

     correctionProcess.WaitForExit();

     status = true;
}

…..

internal void ProcessExited(object sender, System.EventArgs e)
{
      //print out here
}



답변

Exited이벤트에 대한 콜백을 수신 EnableRaisingEvents하려면을 true로 설정해야합니다.

Process correctionProcess = Process.Start(startInfo);
correctionProcess.EnableRaisingEvents = true;
correctionProcess.Exited += new EventHandler(ProcessExited); 


답변

에서 MSDN :

Exited 이벤트는 관련 프로세스가 종료되었음을 나타냅니다. 이 발생은 프로세스가 종료 (중단)되었거나 성공적으로 종료되었음을 의미합니다. 이 이벤트는 EnableRaisingEvents 속성 값이 true 인 경우에만 발생할 수 있습니다.

해당 속성을 true로 설정 했습니까?


답변

당신은 설정해야합니다 Process.EnableRaisingEvents으로 true.


답변

correctionProcess.EnableRaisingEvents = true 설정


답변

new Process()에있는 예를 보았습니다 using. Exited기능 을 사용하려면 그렇게하지 마십시오 . 이 using절은의 모든 이벤트 핸들과 함께 인스턴스를 파괴합니다 Exited.

이…

using(var process = new Process())
{
   // your logic here
}

이거 …

var process = new Process();


답변