2010-05-06 2 views
5

Возможен обратный этим вопрос: Process.HasExited returns true even though process is running?C#: Process.HasExited возвращает ложь, даже если процесс окончился

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

myProcess.Kill(); 

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

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

ответ

7

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

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

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

myProcess.Kill(); 
myProcess.WaitForExit(); 
+0

Это верно, я перенаправить стандартный вывод. Я решил поместить Kill и WaitForExit (1000) в триггер повторной попытки. Я не могу позволить себе ждать всегда, как предлагает статья MSDN. – Jeremy

+0

Я также задаюсь вопросом, означает ли это, что это возможно для завершения процесса и до сих пор его стандартные выходные потоки открыты. Или эта статья означает, что мой локальный потоковый анализатор не закрыл сообщение, несмотря на выход из него. – Jeremy

Смежные вопросы