Почему метод 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
}

Ответ 1

Для получения обратного вызова в событии Exited EnableRaisingEvents должно быть установлено значение true.

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

Ответ 2

От MSDN:

Событие "Выход" указывает, что связанный с ним процесс. Эта означает, что процесс прерывается (прерывается) или успешно закрыт. Это событие может возникают, только если значение Свойство EnableRaisingEvents истинно.

Установили ли это свойство значение true?

Ответ 3

Вы должны установить Process.EnableRaisingEvents в true.

Ответ 4

Установить коррекциюProcess.EnableRaisingEvents = true

Ответ 5

Я встречал примеры, которые помещают new Process() в предложение using. Не делайте этого, если хотите использовать функцию Exited. Использование пункта уничтожит ваш экземпляр вместе с любыми дескрипторами событий в Exited.

Это...

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

Должно быть это...

var process = new Process();