다음 코드가 있지만 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();