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