IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

process exited n'est pas appelé après le process d'un exécutable


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Par défaut process exited n'est pas appelé après le process d'un exécutable
    Bonjour,
    La méthode exited de mon process n'est pas appelée malgré que j'ai bien spécifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    process.EnableRaisingEvents = true;
    Le process qui est appelé provient d'un exécutable que j'ai moi-même programmé et qui est simplissime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    namespace CalledProcess
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("ici");
            }
     
        }
    }
    Et le code de mon programme appelant est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    namespace Test
    {
        class Program
        {
            static string _sBatchPath = @"E:\CalledProcess.exe";
     
            static void Main(string[] args)
            {
                child_process();
     
                sbrWriteFile(_sFileName, "Appelant début");
            }
     
            private static void ProcessExited(object sender, EventArgs e)
            {
                Console.WriteLine("Appelant fin");
            }
     
            private static void child_process()
            {
                var info = new ProcessStartInfo(_sBatchPath);
                info.UseShellExecute = true;
     
                var process = new Process();
                process.StartInfo = info;
                process.EnableRaisingEvents = true;
                process.Exited += ProcessExited;
                process.Start();
            }
        }
    }
    Merci beaucoup par avance.

    Eric.

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Ce n'est pas que l'événement n'est pas généré, c'est juste que le programme principale se termine avant qu'il ne soit généré.

    La méthode Start de la classe Process n'est pas bloquante, c'est-à-dire que le processus enfant est lancé en parallèle, et que l'exécution du programme principal continue.

    Comme après avoir lancé le processus enfant, le programme principal quitte très vite, l'événement n'a pas le temps d'être appelé. Il faut donc "créer un délai". Plusieurs possibilité pour cela (liste non exhaustive) :
    • utiliser la méthode WaitForExit pour attendre la fin du processus enfant ;
    • rajouter un Console.ReadLine() à la fin du programme principal pour qu'il ne quitte qu'une fois la touche Entrée appuyée ;
    • attendre un délai quelconque, via Thread.Sleep par exemple (1s devrait être amplement suffisant !)

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2013, 09h58
  2. Réponses: 4
    Dernier message: 06/07/2010, 23h02
  3. Réponses: 4
    Dernier message: 28/09/2006, 14h50
  4. Réponses: 2
    Dernier message: 27/07/2006, 09h30
  5. [servlet][filtre] filtre qui n'est pas appelé
    Par felix79 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/06/2005, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo