Comment savoir quand un WinForm est chargé par Process.Start?
Question
Je suis dans un WindowsForm (c # .net 3.5) et d'un simple clic lance une autre application externe (également .net 3.5) en utilisant Process.Start () et de comprendre quand il est disponible après avoir lancé il.
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()?
Comment puis-je le faire?
La solution
Pour attendre le processus pour créer sa forme, appelez le méthode WaitForInputIdle
.
Pour savoir s'il est prêt, essayez ceci:
bool isReady = proc.WaitForInputIdle(0);
Ou, alternativement,
bool isReady = (proc.MainWindowHandle != IntPtr.Zero);
Vous pouvez également utiliser la propriété MainWindowHandle pour envoyer des messages à la forme en utilisant le la fonction API de SendMessage
Autres conseils
Vous pouvez passer un argument au processus faisant savoir comment il a été lancé.
psInfo.Arguments = "-startedByProcess";
Alors que le rappel de processus enfant au processus de propriétaire pour le faire savoir qu'il a commencé, via Remoting ou quelque chose comme ça.