2010-05-06 2 views
5

Peut-être l'inverse de cette question: Process.HasExited returns true even though process is running?C#: Process.HasExited retourne false, même si le processus a pris fin

J'ai appelé Kill() sur un processus et il semble avoir quitté. Mais quand je teste HasExited, je reçois faux:

myProcess.Kill(); 

while (!myProcess.HasExited) 
{ 
    Thread.Sleep(1000); 
} 

Et cela continue indéfiniment. Accordé, je dois changer ce code pour arrêter d'attendre finalement, mais je suis curieux de savoir pourquoi HasExited renvoie toujours faux quand le processus semble avoir laissé tomber de la carte pour ainsi dire.

Répondre

7

Vous redirigez la sortie standard? MSDN énonce ce qui suit:

Lorsque la sortie standard a été redirigés vers des gestionnaires d'événements asynchrones, il est possible que le traitement de sortie ne sera pas complet lorsque cette propriété renvoie true. Pour vous assurer que la gestion des événements asynchrones a été effectuée, appelez la surcharge WaitForExit() qui ne prend aucun paramètre avant de vérifier HasExited.

Quoi qu'il en soit, la solution proposée devrait éventuellement faire l'affaire:

myProcess.Kill(); 
myProcess.WaitForExit(); 
+0

Ce qui est juste, je ne réoriente la sortie standard. J'ai opté pour mettre Kill et WaitForExit (1000) dans une boucle de réessayer trois fois cependant. Je ne peux pas me permettre d'attendre éternellement comme le suggère l'article MSDN. – Jeremy

+0

Je me demande également si cela signifie qu'il est possible qu'un processus se termine et que ses flux de sortie standard restent ouverts. Ou l'article signifie-t-il que mon lecteur de flux local n'a pas reçu le message de fermeture malgré la sortie du processus source? – Jeremy

Questions connexes