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 :

Ping dans une richtextbox [Débutant]


Sujet :

C#

  1. #1
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut Ping dans une richtextbox
    Bonjour tout le monde !

    Alors voila, je suis technicien help desk pour une grosse enseigne et tente de développer une petite appli pour mes collègues qui permet de regrouper quelque petites commandes cmd dans une petite interface graphique plus sympa a utiliser qu'une banale fenêtre DOS.

    Je code en c# et le hic c'est que mes compétences en développement sont vraiment basiques.. et je bloque sur la partie ou je dois afficher le résultat de la commande " ping x.x.x.x " dans ma richtextbox, ou plutôt non, j'y arrive mais pas moyen de l’afficher en temps réel, c'est a dire ligne par ligne.
    Quand je lance mon process il attend de finir de s’exécuter avant de m'afficher le résultat dans la richtextbox.

    Quelqu'un aurait une idée pour faire ce que je veux faire ? =)

    Merci pour vos réponses et n’hésitez pas a employer un langage pour noob, je ne suis que tout nouveau en prog

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Bonjour,

    Voici pour répondre à ta question même si je préférerai utiliser la classe ping interne https://msdn.microsoft.com/en-us/lib...vs.110%29.aspx

    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 p = new Process();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.Arguments = "/c ping www.voila.fr";
                p.Start();
     
                string standard_output;
                while ((standard_output = p.StandardOutput.ReadLine()) != null)
                {
                    richTextBox1.AppendText(standard_output + "\r\n");
                    richTextBox1.Refresh();
                }
                p.WaitForExit();

  3. #3
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut Super !!
    Woow ! ca fonctionne impec ! un énorme merci ericclm128 !

    Par contre y'a juste encore un petit soucis, j'ai pris ton code et l'ai adapté pour remplacer " www.voila.fr " par le contenu d'une textbox.
    Jusque la tout roule, le code s’exécute comme je veux mais ca me bloque ma form, je ne peux par exemple pas la déplacer ou jouer avec l'ascenseur pendant que mon code s’exécute..

    J'ai déjà un bout de réponse: les threads, mais je ne sais absolument pas m'en servir..
    J'ai bien essayé de comprendre comment ça fonctionne en lisant des cours / tutos ici est la mais pas moyen de piger le mécanisme...

    Quelqu'un saurait ?

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Effectivement si tu veut que ta fenêtre reste réactive, il faut que tu lance ce qui est bloquant dans un autre thread.

    Moi j'ai mit ça "richTextBox1.Refresh();" pour forcer le rafraichissement de la RichTextBox et garder un code simple répondant à ta question.

  5. #5
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut
    D'accord je vois.

    Et tu saurais faire ca et surtout m'expliquer comment ca fonctionne ?
    Je ne sais pas utiliser les threads, j'ai bien essayé de comprendre mais je suis pas tres a l'aise avec le jargon développeur.. ^^

  6. #6
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Voici un exemple simple :

    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
            private void button1_Click(object sender, EventArgs e)
            {
                Thread t = new Thread(Ping);
                t.Start("www.voila.fr");
            }
     
            public void Ping(object serveur)
            {
                Process p = new Process();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.Arguments = "/c ping " + serveur.ToString();
                p.Start();
     
                string standard_output;
                while ((standard_output = p.StandardOutput.ReadLine()) != null)
                    richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(standard_output + "\r\n"); }));
                p.WaitForExit();
            }

  7. #7
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut
    Haaa mieux !

    Du coup j'ai repris ton code et j'ai juste changée la ligne de l'argument du startinfo.

    Ca donne ca:

    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
     private void button1_Click(object sender, EventArgs e)
            {
                Thread t = new Thread(Ping);
                t.Start("www.voila.fr");
            }
            public void Ping(object serveur)
            {
                Process p = new Process();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.Arguments = "/c ping " + textBox1.Text;
                p.Start();
     
                string standard_output;
                while ((standard_output = p.StandardOutput.ReadLine()) != null)
                    richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(standard_output + "\r\n"); }));
                p.WaitForExit();
            }
    Le résultat est impec ! c'est exactement ce que je cherchais !
    Y'a plus qu'a trouver comment cleaner la richtextbox en cas d'un nouvel appui sur le bouton qui exécute le code.

  8. #8
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Ça fonctionne ? Bizarre, comme ceci c'est mieux même si pour toi le résultat est identique
    La fonction Ping est exécuter sur un autre thread, je suis étonné qu'elle accède à la TextBox.

    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
    private void button1_Click(object sender, EventArgs e)
    {
    	Thread t = new Thread(Ping);
    	t.Start(textBox1.Text);
    }
    public void Ping(object serveur)
    {
    	Process p = new Process();
    	p.StartInfo.UseShellExecute = false;
    	p.StartInfo.CreateNoWindow = true;
    	p.StartInfo.RedirectStandardOutput = true;
    	p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
    	p.StartInfo.FileName = "cmd.exe";
    	p.StartInfo.Arguments = "/c ping " + serveur.ToString();
    	p.Start();
     
    	string standard_output;
    	while ((standard_output = p.StandardOutput.ReadLine()) != null)
    		richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(standard_output + "\r\n"); }));
    	p.WaitForExit();
    }

  9. #9
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut
    Je suis d'accord avec toi moi aussi ça me semble bizarre mais oui ça fonctionne.
    Apres j'ai rien contre un code propre hein !

    Bon par contre petit soucis découvert a l'instant, lorsque je ferme ma form alors que le process n'a pas finit de s’exécuter j'ai une exception à la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(standard_output + "\r\n"); }));
    Peux tu me dire comment je peux gérer cette exception stp ? je sais que c'est possible mais en pratique cela reste flou pour moi..

  10. #10
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut
    Ha bha non c'est bon j'ai trouvé !

    Voici le code fonctionnel:

    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
    33
    34
    private void button1_Click(object sender, EventArgs e)
            {
     
                richTextBox1.Clear();
                Thread t = new Thread(Ping);
                t.Start(textBox1.Text);
            }
            public void Ping(object serveur)
            {
     
                try
                     {  
     
                Process p = new Process();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(850);
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.Arguments = "/c ping " + serveur.ToString();
                p.Start();
     
                string standard_output;
                while ((standard_output = p.StandardOutput.ReadLine()) != null)
     
                richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(standard_output + "\r\n"); }));
                p.WaitForExit();
     
                       }
                    catch
                          {
                            this.Close();
                          }
            }
    Encore milles mercis a toi ericlm128 ! tu viens de mettre fin a des semaines de recherche ! Pfiou !

  11. #11
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 218
    Par défaut
    Oui un petit try/catch, le "this.close" semble superflu.

    De rien a+ l'ami

  12. #12
    Membre averti
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2016
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2016
    Messages : 55
    Par défaut
    Ha oui tu as raison ! =)

    Je passe la discussion en résolu !

    A plus tard pour de nouveaux projets !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ping dans une fenêtre wxWidget
    Par cotede2 dans le forum wxWidgets
    Réponses: 3
    Dernier message: 14/05/2007, 16h10
  2. Réponses: 4
    Dernier message: 31/08/2006, 13h44
  3. [VB 2005]Selectionner un mot dans une RichTextBox
    Par D4rkTiger dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/07/2006, 22h27
  4. [C#][VSN2003] Image dans une RichTextBox
    Par shinkyo dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/04/2006, 22h51
  5. Sauvegarder une mise en forme dans une RichTextBox
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2005, 12h19

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