2009-07-24 7 views
2

Je suis dans un WindowsForm (C# .net 3.5) et sur un clic d'un bouton lancer une autre application externe (aussi .net 3.5) en utilisant Process.Start() et comprendre quand il est disponible après que je l'ai lancé.Comment savoir quand un winform est chargé par Process.Start?

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 faire?

Répondre

3

Pour attendre que le processus crée son formulaire, appelez la méthode WaitForInputIdle.

Pour savoir s'il est prêt, essayez ceci:

bool isReady = proc.WaitForInputIdle(0); 

Ou encore,

bool isReady = (proc.MainWindowHandle != IntPtr.Zero); 

Vous pouvez également utiliser la propriété MainWindowHandle pour envoyer des messages à la forme en utilisant la fonction API SendMessage

0

Vous pouvez transmettre un argument au processus en lui indiquant comment il a été lancé.

psInfo.Arguments = "-startedByProcess"; 

ont ensuite 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.