2010-07-14 4 views
2

J'ai une application WinForms qui démarre un processus wpf en cours d'exécution en utilisant Process.Start. Je voudrais savoir quand le processus WPF est fini de charger et je peux accéder à la propriété process.MainWindowHandle (son 0 avant son complètement chargé).Attendre le chargement de l'application WPF après avoir démarré avec Process.Start()

J'ai essayé d'interroger, mais le handle est toujours 0. Cependant, si je débogue et attend (après Process.Start) pour l'application WPF à charger - je vais alors obtenir le bon handle.

ne fonctionne pas:

int maxCount=100000; 
int count=0; 
do 
{ 
    wpfProcess.WaitForInputIdle(); 
    _hWnd = net4ReconProcess.MainWindowHandle; 
    count++; 
} while (_hWnd.ToInt32() == 0 || count > maxCount); 
+0

Quelle est net4ReconProcess dans le code ci-dessus par la route? – VivekDev

Répondre

5

Ajouter process.Refresh(); à la boucle while.

0

L'utilisation d'une boucle while pour WaitForInputIdle est un non-sens car cet appel bloque le thread en cours jusqu'à ce que l'autre processus ait terminé son initialisation. Après cela, il revient toujours immédiatement. S'il vous plaît lire le poste WaitForInputIdle should really be called WaitForProcessStartupComplete – The Old New Thing

Comme le dit raymond, il devrait vraiment être appelé WaitForProcessStartupComplete.

Vous devez utiliser ce code:

if (!wpfProcess.WaitForInputIdle(10000)) // 10 s timout 
    throw new ApplicationException("Process takes too much time to start"); 
_hWnd = net4ReconProcess.MainWindowHandle; 
Questions connexes