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

 .NET Discussion :

Process.StandardOutput.EndOfStream bloquant à la lecture


Sujet :

.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut Process.StandardOutput.EndOfStream bloquant à la lecture
    Bonjour,

    j'ai développé une petite application en mode console. Voici le 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Log(String Text)
            {
                String CurrentDateTime;
     
                CurrentDateTime = String.Format("{0:d2}/{1:d2}/{2:d4} {3:d2}:{4:d2}", DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year, DateTime.Now.Hour, DateTime.Now.Minute);
     
                Console.WriteLine(CurrentDateTime + " - " + Text.TrimEnd() + Environment.NewLine);
            }
     
            static void Main(string[] args)
            {
                int i;
                String RootFile ;
                ClassFTPServer server;
     
                RootFile = System.IO.Directory.GetCurrentDirectory();
     
                if (args.Length > 1)
                {
                    for (i = 0; i < args.Length; i++)
                    {
                        if (args[i].ToLower() == "-root")
                        {
                            i++;
                            RootFile = args[i];
                        }
                    }
                }
     
                server = new ClassFTPServer(RootFile);
                server.OnLog = Log;
                server.Start();
     
                Log("Server terminate");
            }
        }
    }
    Je fais une interface graphique qui va lancer l'application console.
    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
            private void ReadLogFromServer()
            {
                String Line;
     
                while (ServerProcessus.StandardOutput.EndOfStream == false)
                {
                    Line = ServerProcessus.StandardOutput.ReadLine();
     
                    if (Line == null)
                    {
                        break;
                    }
     
                    textBoxLog.AppendText(Line + Environment.NewLine);
                    Application.DoEvents();
                } 
            }
    Si je teste mon deuxième code avec n'importe qu'elle application console ça fonctionne (même une que j'écris à la main pour tester)
    Mais avec mon premier programme, Process.StandardOutput.EndOfStream bloque quand il n'y a plus de données.

    D'où vient le problème ?
    J'ai chercher sur Internet mais je n'ai trouvé aucune information. Je pense que le problème vient de mon premier programme mais je ne vois pas où.

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Par défaut
    Je viens de trouver c'est dû à la ligne suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TcpClient client = tl.AcceptTcpClient();
    Je viens d'essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tl.BeginAcceptTcpClient(FTPClientThread, tl);
    même chose.

    Le problème c'est quand il n'y a aucune information ça bloque.
    Il va falloir que je créer un backgroundworked.

    Par contre autre question : comment empêcher la fenêtre noire d'apparaitre quand c'est un programme console ?
    Réponse : ServerProcessus.StartInfo.CreateNoWindow

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

Discussions similaires

  1. include() bloquant la lecture du script
    Par Kedrihan dans le forum Langage
    Réponses: 4
    Dernier message: 30/12/2013, 19h52
  2. [DATA] Caractères spéciaux bloquant la lecture
    Par didier2710 dans le forum SAS Base
    Réponses: 2
    Dernier message: 04/06/2013, 12h48
  3. Réponses: 3
    Dernier message: 12/09/2012, 18h42
  4. Réponses: 10
    Dernier message: 16/02/2010, 11h25
  5. [C#] Comment décoder le Diagnostics.Process.StandardOutput
    Par CrashMan dans le forum Contribuez
    Réponses: 14
    Dernier message: 11/07/2005, 11h10

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