2010-05-06 19 views
5

Ewentualnie odwrotność tego pytania: Process.HasExited returns true even though process is running?C#: Process.HasExited zwraca false mimo że proces został zakończony

Zadzwoniłem kill() na procesie i wydaje się, że odszedł. Ale kiedy testuję HasSxited, otrzymuję fałszywe:

myProcess.Kill(); 

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

I to trwa przez czas nieokreślony. To prawda, muszę zmienić ten kod, aby w końcu przestać czekać, ale jestem ciekawy, dlaczego HasExited wciąż zwraca wartość false, gdy wydaje się, że proces został usunięty z mapy.

Odpowiedz

7

Czy przekierowujesz standardowe wyjście? MSDN stwierdza co następuje:

Kiedy wyjście standard został przekierowany do obsługi zdarzeń asynchronicznych, możliwe jest, że przetwarzanie wyjściowe nie zakończy, gdy ta właściwość zwraca true. Aby upewnić się, że asynchroniczna obsługa zdarzeń została zakończona, wywołaj przeciążenie WaitForExit(), które nie pobiera żadnego parametru przed sprawdzeniem HasExited.

Zresztą sugerowane obejście powinien ewentualnie rade:

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

To prawda, ja przekierować standardowe wyjście. Zdecydowałem się jednak umieścić Kill i WaitForExit (1000) w pętli trzykrotnego powtórzenia. Nie mogę sobie pozwolić na ciągłe czekanie, jak sugeruje artykuł MSDN. – Jeremy

+0

Zastanawiam się również, czy oznacza to, że możliwe jest zakończenie procesu i pozostawienie standardowych strumieni wyjściowych. Czy też ten artykuł oznacza, że ​​mój lokalny program do przesyłania strumieniowego nie otrzymał wiadomości do zamknięcia pomimo zakończenia procesu źródłowego. – Jeremy

Powiązane problemy