¿Cómo saber cuando un WinForm se carga por Process.Start?
Pregunta
Estoy en una WindowsForm (C # .NET 3.5) y el clic de un botón de lanzar otra aplicación externa (también .NET 3.5) usando Process.Start () y entiendo cuando está disponible después de que se han puesto en marcha.
ProcessStartInfo psInfo = new ProcessStartInfo(@"MyApplication.exe");
psInfo.RedirectStandardOutput = true;
psInfo.RedirectStandardError = true;
psInfo.UseShellExecute = false;
psInfo.CreateNoWindow = true;
Process proc = Process.Start(psInfo);
proc... IsFullyLoaded()?
¿Cómo puedo hacerlo?
Solución
Para esperar a que el proceso para crear su forma, llamar a la método WaitForInputIdle
.
Para saber si está listo, intente lo siguiente:
bool isReady = proc.WaitForInputIdle(0);
O, en su defecto,
bool isReady = (proc.MainWindowHandle != IntPtr.Zero);
También puede utilizar la propiedad MainWindowHandle para enviar mensajes al formulario utilizando el SendMessage
función API
Otros consejos
Se puede pasar un argumento al proceso de dejar que se sabe que se puso en marcha.
psInfo.Arguments = "-startedByProcess";
A continuación, tendrá la devolución de llamada proceso secundario al proceso propietario para hacerle saber que se ha iniciado, a través de la interacción remota o algo por el estilo.