System.Diagnostics.Process.Start comportamiento extraño

Estoy escribiendo una aplicación para iniciar y monitorear otras aplicaciones en C #. Estoy usando la clase System.Diagnostics.Process para iniciar aplicaciones y luego monitorear las aplicaciones usando la propiedad Process.Responding para sondear el estado de la aplicación cada 100 milisegundos. Utilizo Process.CloseMainWindow para detener la aplicación o Process.Kill para anularla si no responde.

He notado un comportamiento extraño en el que, a veces, el objeto de proceso se pone en un estado donde la propiedad que responde siempre devuelve verdadero incluso cuando el proceso subyacente se bloquea en un bucle y no responde a CloseMainWindow.

Una forma de reproducirlo es sondear la propiedad Respondiendo justo después de iniciar la instancia de proceso. Así por ejemplo

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

reproducirá el estado de error mientras

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

trabajará. Reducir el período de sueño a 500 introducirá nuevamente el estado de error.

Algo para llamar a _process.Responding demasiado rápido después de iniciar parece impedir que el objeto obtenga el controlador de cola de mensajes de Windows correcto. Supongo que debo esperar a que _process.Start comience a hacer su trabajo asíncrono. ¿Hay una forma mejor de esperar que llamar a Thread.Sleep? No estoy tan seguro de que los 1000 ms siempre serán suficientes.

Respuestas a la pregunta(4)

Su respuesta a la pregunta