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

Windows Forms Discussion :

[C#] Récupérer la sortie d'un programme DOS


Sujet :

Windows Forms

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut [C#] Récupérer la sortie d'un programme DOS
    Bonjour,

    j'ai créer un process pour lister les répertoires à l'aide de la fonction DIR.

    Voici mon code :

    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
    Process proc = new Process();
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardOutput = true;
     
                proc.StartInfo.Arguments = "dir";
                proc.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
     
                proc.StartInfo.CreateNoWindow = true;
     
                proc.Start();
     
                string output = proc.StandardOutput.ReadToEnd();
     
                proc.WaitForExit();
     
                textBox1.Text = output;
    Le problème c'est qu'il faut que j'attende que le programme soit terminé pour que ma textbox1 affiche la sortie.

    Ma question est simple, peut-on récupérer en temps réel la sortie.

    Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    Utilise un BackgroundWorker pour recuperer l'output du DOS
    Ou bien un timer ça ferai aussi l'afffaire de maniere a ce que les 2 action s'effectue de maniere concurante.

  3. #3
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Regarde le code dans ce tuto, il récupère l'output d'un thread qui tourne un fichier DOS.

    Exécution synchrone d'un programme console dans une applicat
    ion C#.



  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    un grand MERCI à vous deux.

    Sympa

    bonne journée

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    BOnjour,

    cela fait maintenant 1 semaine que je cherche à récupérer la sortie de ma console.

    J'ai bien lu les articles du BackgroundWorker ainsi que les Threads.

    Mais je n'arrive toujours pas à effectuer.

    Lors du lancement de ma form Form1, je lance le backgroundWorker comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    backgroundWorker1.RunWorkerAsync();
    puis dans l'évenement DoWork du BackgroundWorker, j'ai mis ceci :

    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
     
    Process proc = new Process();
                proc.StartInfo.FileName = @"C:\Windows\System32\cmd.exe";
                proc.StartInfo.Arguments = "dir";
     
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.CreateNoWindow = true;
                proc.StartInfo.RedirectStandardOutput = true;
     
                proc.Start();
     
                string str = proc.StandardOutput.ReadLine();
                textBox1.Text = str;
     
                proc.Close();
    Mais je n'ai toujours rien dans ma TextBox.

    Auriez-vous un exemple avec la commande dir de la console ?

    Merci d'avance.

  6. #6
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : SharePoint developpeur
    Secteur : Service public

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Ton problème vient de cette partie du code. Proc.Start s'exécute de manière asynchrone donc ton ReadLine s'effectue déjà alors que la procédure externe est seulement en cours de chargement. Tu dois faire une boucle en surveillant l'état de la procédure appelée. Regarde bien l'exemple, il y a ce genre de boucle dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc.Start();
    string str = proc.StandardOutput.ReadLine();
    textBox1.Text = str;

  7. #7
    Membre habitué Avatar de deeal
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 218
    Points : 169
    Points
    169
    Par défaut
    Citation Envoyé par jab
    Ton problème vient de cette partie du code. Proc.Start s'exécute de manière asynchrone donc ton ReadLine s'effectue déjà alors que la procédure externe est seulement en cours de chargement. Tu dois faire une boucle en surveillant l'état de la procédure appelée. Regarde bien l'exemple, il y a ce genre de boucle dedans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    proc.Start();
    string str = proc.StandardOutput.ReadLine();
    textBox1.Text = str;
    j'ai eu a peu pres le meme probleme, je devais lancer un process, mais un quand tu lances tu n'as aucun effet sur lui (apart l'arreter, je peux me tromper)
    ce que j'ai fait, je ne sais pas si c'est la meilleur solution
    mais c'est de creer un thread qui surveille l'execution de mon process
    et ca marche tres bien, car je n'attends pas que le process se termine, pour avancer par exemple ma progress bar
    je sais que c'est un peu lourd, mais c'est la seule facon que j'ai trouve d'avoir un peu de controle, et surtout ne pas bloquer mon programme quand le process externe s'execute

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    merci pour vos réponses, je vais donc aller me pencher sur la méthode du thread.


Discussions similaires

  1. récupérer la sortie d'un programme externe
    Par diodio13fr dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/11/2009, 00h15
  2. A la sortie de la programmation DOS, WINDEV ? DELPHI ? ou ?
    Par zanimox dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 18/08/2005, 18h25
  3. redirection de la sortie d'un programme dos
    Par skaii dans le forum MFC
    Réponses: 2
    Dernier message: 11/05/2005, 15h42
  4. Réponses: 4
    Dernier message: 04/07/2003, 20h13

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