Come sapere quando un WinForm viene caricato da Process.Start?
Domanda
Sono in una WindowsForm (C # .NET 3.5) e al clic di un pulsante lanciare un'altra applicazione esterna (anche .NET 3.5) utilizzando Process.Start () e capire quando è disponibile dopo aver lanciato esso.
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()?
Come posso fare?
Soluzione
Per attendere che il processo per creare la sua forma, chiamare il metodo WaitForInputIdle
.
Per scoprire se è pronto, provate questo:
bool isReady = proc.WaitForInputIdle(0);
O, in alternativa,
bool isReady = (proc.MainWindowHandle != IntPtr.Zero);
È anche possibile utilizzare la proprietà MainWindowHandle per inviare messaggi al modulo utilizzando il SendMessage
funzione API
Altri suggerimenti
Si potrebbe passare un argomento al processo di lasciarlo sapere come è stato lanciato.
psInfo.Arguments = "-startedByProcess";
Poi hanno la richiamata processo figlio al processo proprietario per fargli sapere di aver iniziato, tramite i servizi remoti o qualcosa del genere.