Process output c#

Signaler
Messages postés
13
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
12 septembre 2004
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
bonjour a tous
jai fouiller sur le forum pour trouver un moyen de recevoir en temps réel les message d'une fenetre ms-dos

j'ai commencer par la méthode la plus simple : process.StandardOutput.readline()...
et jaffiche le résultat dans un textbox
mais il y a un probleme
le readline "bloque" et on dirais que laffichage dans le textbox
gèle mais il repart l,affichage bcp plus tard.
Donc si il y a un moyen d'éviter ce lag la vous seriez bien gentil de me le dire.
jai lu dans le forum qu'on pouvais le faire avec la classe System.messenging.message mais je sais po comment il utilise cela

merci a tous

Ti-Math

5 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
StandardOutput est un StreamReader, et ses methodes sont bloquantes, donc si tu lances une operation de lecture dans le thread de ton appli, celle-ci est bloquée tant qu'il n'y a rien a lire

Cocoricoooooooo !!!!
Messages postés
13
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
12 septembre 2004

Ou je c que c'est une méthode bloquante mais ce qui arrive c que la fenetre ms-dos normal s'affiche tres bien mais que le output du process s'arrete pendant lontemp avant de recontinuer.
a moins qui y est un genre de sleep dans readline. parce que cela se ne peut pas que ma fenetre ms-dos naffiche aucun message pendant si longtemps.

(Si tu sais le pk que sa bloque ou meme une hypotèse sa m'aiderais)

merci

Ti-Math
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
montre un peu ton code de lecture stp

Cocoricoooooooo !!!!
Messages postés
13
Date d'inscription
samedi 26 juin 2004
Statut
Membre
Dernière intervention
12 septembre 2004

ce code est appeler par un thread indépendant pour pas que l'interface gèle. et txt c un textbox.
private void Output()
{
while(!Dos.HasExited)
{
while (Dos.StandardOutput.Peek() > -1)
{
string Message = Dos.StandardOutput.ReadLine() + "\r\n";
if(Txt != null)
{
try
{
Txt.Text += Message;
if(Txt.Lines.Length > 100)
{
int Index = Txt.Text.IndexOf("/r/n");
Txt.Text = Txt.Text.Remove(0,Index + 2);
}
}
finally
{}
}
}
}

}

Ti-Math
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
string Message;
while(!Dos.HasExited)
{
Message = Dos.StandardOutput.ReadLine() + "\r\n";
if(Txt != null)
{
Txt.Text += Message;
if(Txt.Lines.Length > 100)
{
int Index = Txt.Text.IndexOf("\r\n");
Txt.Text = Txt.Text.Remove(0,Index + 2);
}
}
}


Cocoricoooooooo !!!!