System.Diagnostics.Process.Start dziwne zachowanie

Piszę aplikację do uruchamiania i monitorowania innych aplikacji w języku C #. Korzystam z klasy System.Diagnostics.Process, aby uruchomić aplikacje, a następnie monitorować aplikacje za pomocą właściwości Process.Responding, aby odpytywać stan aplikacji co 100 milisecs. Używam Process.CloseMainWindow, aby zatrzymać aplikację lub Process.Kill, aby ją zabić, jeśli nie odpowiada.

Zauważyłem dziwne zachowanie, w którym czasami obiekt procesu przechodzi w stan, w którym właściwość odpowiadająca zawsze zwraca wartość true, nawet gdy proces bazowy zawiesza się w pętli i nie odpowiada na CloseMainWindow.

Jednym ze sposobów odtworzenia jest sondowanie właściwości Responding zaraz po uruchomieniu instancji procesu. Na przykład

_process.Start();
bool responding = _process.Responding;

odtwarza stan błędu podczas

_process.Start();
Thread.Sleep(1000);
bool responding = _process.Responding;

będzie działać. Zmniejszenie okresu uśpienia do 500 spowoduje ponowne wprowadzenie stanu błędu.

Coś w wywoływaniu _process.Spondowanie zbyt szybko po uruchomieniu wydaje się uniemożliwiać obiektowi uzyskanie odpowiedniego programu do obsługi kolejek wiadomości systemu Windows. Myślę, że muszę poczekać na _process.Start, aby zakończyć pracę asynchroniczną. Czy jest lepszy sposób na czekanie na to niż wywołanie Thread.Sleep? Nie jestem przekonany, że 1000 ms zawsze będzie wystarczające.

questionAnswers(4)

yourAnswerToTheQuestion