C #: Process.HasExited возвращает false, даже если процесс завершен - PullRequest
6 голосов
/ 06 мая 2010

Возможно обратный вопрос: Process.HasExited возвращает true, даже если процесс запущен?

Я вызвал Kill () для процесса, и он, похоже, завершился. Но когда я тестирую HasExited, я получаю false:

myProcess.Kill();

while ( !myProcess.HasExited )
{
    Thread.Sleep(1000);
}

И это продолжается до бесконечности. Конечно, я должен изменить этот код, чтобы в конечном итоге перестать ждать, но мне любопытно, почему HasExited по-прежнему возвращает false, когда процесс, кажется, выпал из карты, так сказать.

1 Ответ

8 голосов
/ 06 мая 2010

Вы перенаправляете стандартный вывод? MSDN гласит следующее:

Когда стандартный вывод был перенаправлен на асинхронные обработчики событий, возможно, что обработка вывода не будет завершена, когда это свойство вернет true. Чтобы убедиться, что асинхронная обработка событий завершена, вызовите перегрузку WaitForExit (), которая не принимает параметров перед проверкой HasExited.

В любом случае, предложенный обходной путь, возможно, сработает:

myProcess.Kill();
myProcess.WaitForExit();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...