104 votes

Pourquoi la méthode Exit de mon processus n'est-elle pas appelée ?

J'ai le code suivant, mais pourquoi la méthode ProcessExited n'est-elle jamais appelée ? C'est la même chose si je n'utilise pas le shell Windows (startInfo.UseShellExecute = false).

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = true;
startInfo.UseShellExecute = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.FileName = path;
startInfo.Arguments = rawDataFileName;
startInfo.WorkingDirectory = Util.GetParentDirectory(path, 1);

try
{
     Process correctionProcess = Process.Start(startInfo);
     correctionProcess.Exited += new EventHandler(ProcessExited);                   

     correctionProcess.WaitForExit();

     status = true;
}

.....

internal void ProcessExited(object sender, System.EventArgs e)
{
      //print out here
}

263voto

Elisha Points 11999

Pour recevoir un rappel sur un événement Exited, le EnableRaisingEvents doit être défini sur true.

Process correctionProcess = Process.Start(startInfo);
correctionProcess.EnableRaisingEvents = true;
correctionProcess.Exited += new EventHandler(ProcessExited); 

32voto

CodingGorilla Points 12373

Depuis MSDN :

L'événement Quitté indique que le processus associé est sorti. Cet événement signifie soit que le processus s'est terminé (avorté), soit qu'il a été clôturé avec succès. Cet événement ne peut se produire que si la valeur de la propriété EnableRaisingEvents est true.

As-tu mis cette propriété à vrai ?

19voto

Sam B Points 1671

Vous devez définir Process.EnableRaisingEvents sur true.

16voto

Adam Cox Points 1

J'ai trouvé des exemples qui placent new Process() dans une clause using. Ne faites pas cela si vous souhaitez utiliser la fonctionnalité Exited. La clause using détruit l'instance ainsi que les manipulations d'événements sur Exited.

C'est...

using(var process = new Process())
{
   // your logic here
}

Ça devrait être ça...

var process = new Process();

16voto

Gary L Cox Jr Points 537

Définir correctionProcess.EnableRaisingEvents = true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X