2010-12-16 162 views
8

permet de dire que j'ai un processus avec l'ID 1234. Ce processus est en cours d'exécution avant que mon application s'exécute.Problème avec le processus terminé

Je possède ce code:

 Process app = Process.GetProcessById(1234); 
     MessageBox.Show(app.MainWindowTitle); 
     app.Exited += this.methodShowsMessageBox; 

Maintenant, quand je compiler et exécuter l'application, il obtient le processus et affiche le titre de la fenêtre principale. Cependant, quand je ferme le processus 1234, l'app.Exited ne tire pas ... pourquoi est-ce? Et comment pourrais-je l'obtenir pour tirer?

Répondre

17

Veuillez noter que le documentation indique que EnableRaisingEvents doit être défini sur true avant que cet événement ne se déclenche.

+0

yahoo vous avez sauvé ma journée! – TheVillageIdiot

3

Par défaut, pour des raisons de performances, la classe Process ne déclenche pas d'événements. Si vous souhaitez que l'objet Process surveille Exited et déclenche cet événement, vous devez définir sa propriété EnableRaisingEvents sur true.

Il y a un coût associé à regarder un processus pour sortir. Si EnableRaisingEvents est true, l'événement Exited est déclenché lorsque le processus associé se termine. Les procédures que vous avez spécifiées pour l'événement Exited s'exécutent à ce moment-là.

Parfois, votre application démarre un processus mais il n'a pas besoin d'être notifié de sa fermeture. Par exemple, votre application peut démarrer Notepad à permettre à l'utilisateur d'effectuer le texte édition, mais ne pas utiliser davantage de l'application Bloc-notes. Vous pouvez choisir de ne pas être informé lorsque le processus se termine, car il n'est pas pertinent pour le fonctionnement continu de votre application. Définir EnableRaisingEvents sur false enregistre ressources système.