J'ai une application qui fait
Process.Start()
pour démarrer une autre application 'ABC'. Je veux attendre la fin de cette application (le processus se termine) et continuer mon exécution. Comment puis-je le faire?
Il peut y avoir plusieurs instances de l'application «ABC» en cours d'exécution en même temps.
Réponses:
Je pense que vous voulez juste ceci:
Voir la page MSDN pour la méthode. Il a également une surcharge où vous pouvez spécifier le délai d'expiration, de sorte que vous n'attendez pas potentiellement indéfiniment.
la source
Utiliser
Process.WaitForExit
? Ou vous abonner à l'Process.Exited
événement si vous ne souhaitez pas bloquer? Si cela ne fait pas ce que vous voulez, veuillez nous donner plus d'informations sur vos besoins.la source
WaitForExit
premier ... dans certains cas, vous voudrez peut-être exécuter plus de code lorsque quelque chose se termine, mais cela ne signifie pas que vous devez bloquer le thread actuel.Process.Exited
événement, je pense que vous devez configurer le processus au préalable en définissant la valeurProcess.EnableRaisingEvents
true. Cependant, étant donné que cette question a plus de trois ans, il se peut que ceProcess.EnableRaisingEvents
n'était pas une chose au moment où elle a été posée.Process.Exited
événement. Merci! +1 pour exhaustivitéJe fais ce qui suit dans ma candidature:
Il y a quelques fonctionnalités supplémentaires qui pourraient vous être utiles ...
la source
Vous pouvez utiliser l'attente de sortie ou vous pouvez attraper la propriété HasExited et mettre à jour votre interface utilisateur pour tenir l'utilisateur "informé" (gestion des attentes):
la source
J'ai eu un cas où
Process.HasExited
n'a pas changé après avoir fermé la fenêtre appartenant au processus. Donc çaProcess.WaitForExit()
n'a pas marché non plus. J'ai dû surveiller ceProcess.Responding
qui est devenu faux après avoir fermé la fenêtre comme ça:Peut-être que cela aide quelqu'un.
la source
Process.WaitForExit devrait être exactement ce que vous cherchez, je pense.
la source
Se référant à l'exemple de Microsoft: [ https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.enableraisingevents?view=netframework-4.8]
Le mieux serait de définir:
Sinon, le code sera bloqué. De plus, aucune propriété supplémentaire n'est requise.
la source
Comme le dit Jon Skeet, utilisez
Process.Exited
:la source
Essaye ça:
la source