System.Diagnostics.Process.Start seltsames Verhalten

Ich schreibe eine Anwendung zum Starten und Überwachen anderer Anwendungen in C #. Ich verwende die System.Diagnostics.Process-Klasse, um Anwendungen zu starten und dann die Anwendungen mithilfe der Process.Responding-Eigenschaft zu überwachen, um den Status der Anwendung alle 100 Millisekunden abzufragen. Ich verwende Process.CloseMainWindow, um die Anwendung zu stoppen, oder Process.Kill, um sie zu beenden, wenn sie nicht reagiert.

Ich habe ein seltsames Verhalten festgestellt, bei dem das Prozessobjekt manchmal in einen Zustand versetzt wird, in dem die Antworteigenschaft immer true zurückgibt, selbst wenn der zugrunde liegende Prozess in einer Schleife hängt und nicht auf CloseMainWindow reagiert.

Eine Möglichkeit zum Reproduzieren besteht darin, die Eigenschaft Responding direkt nach dem Starten der Prozessinstanz abzufragen. Also zum Beispiel

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

reproduziert den Fehlerzustand während

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

wird funktionieren. Durch Verringern der Ruhezeit auf 500 wird der Fehlerzustand erneut eingeleitet.

Ein Aufruf von _process führt zu einer zu schnellen Reaktion nach dem Start. Dies scheint zu verhindern, dass das Objekt den richtigen Windows-Message-Queue-Handler erhält. Ich denke, ich muss auf _process.Start warten, um die asynchrone Arbeit abzuschließen. Gibt es eine bessere Möglichkeit, darauf zu warten, als Thread.Sleep aufzurufen? Ich bin mir nicht sicher, dass die 1000 ms immer ausreichen werden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage