Comportamento estranho System.Diagnostics.Process.Start

Estou escrevendo um aplicativo para iniciar e monitorar outros aplicativos em c #. Eu estou usando a classe System.Diagnostics.Process para iniciar aplicativos e, em seguida, monitorar os aplicativos usando a propriedade Process.Responding para pesquisar o estado do aplicativo a cada 100 milissegundos. Eu uso Process.CloseMainWindow para parar o aplicativo ou Process.Kill para matá-lo se não estiver respondendo.

Eu observei um comportamento estranho em que, às vezes, o objeto de processo entra em um estado em que a propriedade de resposta sempre retorna true mesmo quando o processo subjacente trava em um loop e não responde ao CloseMainWindow.

Uma maneira de reproduzi-lo é pesquisar a propriedade Respondendo logo após iniciar a instância do processo. Então, por exemplo

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

irá reproduzir o estado de erro enquanto

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

vai funcionar. Reduzir o período de sono para 500 apresentará o estado de erro novamente.

Algo em chamar _process.Responder muito rápido depois de iniciar parece impedir o objeto de obter o manipulador de fila de mensagens do windows correto. Eu acho que eu preciso esperar por _process.Start para terminar de fazer seu trabalho assíncrono. Existe uma maneira melhor de esperar por isso do que chamar Thread.Sleep? Não estou muito confiante de que as 1000 ms sempre serão suficientes.

questionAnswers(4)

yourAnswerToTheQuestion