2010-09-28 6 views
3

J'ai une application qui génère un fichier .pdf et l'ouvre en utilisant myProcess.start (pdfFileName); . Cet appel est appelé dans le gestionnaire d'événement d'un événement click sur un bouton dans une application Winfom. Tout fonctionne bien, sauf que si je quitte (alt-f4 ou en utilisant la croix en haut à droite) mon application après avoir démarré Acrobat Reader, mon application ne s'arrête pas: le formulaire disparaît, mais la session de débogage dans VS ne vous arrêtez pas, même si j'ai déjà quitté Acrobat Reader. Le comportement est le même si je compile dans realese et/ou démarre l'exe à partir de windows et non de VS, je dois alors tuer le processus avec le gestionnaire de tâches.Comment laisser une application C# se terminer après avoir démarré un nouveau processus?

Je n'ai rien trouvé dans la documentation, mais je comprends que ce soit un problème très courant?

Merci, Jaune.

Répondre

2

Vous devez accrocher le ProcessExit event

myProcess.StartInfo.FileName = fileName; 
myProcess.EnableRaisingEvents = true; 
myProcess.Exited += new EventHandler(myProcess_Exited); 
myProcess.Start(); 

[...] 

private void myProcess_Exited(object sender, System.EventArgs e) { 
    Application.Exit(); 
} 
+0

Ok, merci. Il n'y a donc aucun moyen de démarrer un processus qui n'est pas lié à mon processus. Puisque l'utilisateur peut ouvrir un nombre inconnu de pdf, je dois compter le processus et utiliser le gestionnaire d'événements pour savoir quand ils sont terminés avant de pouvoir quitter()? – Jaunedeau

0

Je viens de le tester, avec Acrobat Reader, et l'application se termine normalement. Vous devez avoir laissé un processus d'arrière-plan ou un ou plusieurs threads en cours d'exécution dans une boucle.

+0

Vous semblez avoir raison: j'ai créé une nouvelle application WinForm, que je viens d'ajouter au bouton, et dans laquelle j'ai défini cette méthode en tant que gestionnaire du clic: private void button1_Click (expéditeur d'objet, EventArgs e) { Processus = new Process(); Process.Start (@ "c: \ a.pdf"); } Et cela fonctionne correctement. Alors peut-être que le problème vient du transformateur XSL: FO (nFop, port java). Je vais essayer de creuser là et mettre à jour si j'ai trouvé la réponse. Merci. – Jaunedeau

+0

Très bien, bonne chance! – Ruel

0
theProcess.EnableRaisingEvents = true; 
theProcess.Exited += delegate(object sender, System.EventArgs e) 
            { Application.Exit(); } 
theProcess.Start(); 
Questions connexes