lecture de la sortie standard
Bonjour,
j'ai un problème concernant la lecture de la sortie standard d'un processus.
je me suis d'abord fortement inspiré de cette page http://jab.developpez.com/tutoriels/...ess/synchrone/ , ainsi que de la doc msdn pour la lecture syncrhone ou asynchrone mais je n'arrive pas à lire la sortie.
Donc pour revenir a mon programme, je lance un "process". durant l'execution de ce processus la sortie standard evolue toute les secondes. J'aimerai pouvoir enregistrer une de ces informations pour faire évoluer une barre de chargement.
voila mes bout de code :
Code:
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
|
md = new MessageDialog (this, DialogFlags.DestroyWithParent,
MessageType.Info, ButtonsType.Cancel,"test","");
//on crée le thread de lecture des infos
Thread readInfo = new Thread(new ThreadStart(this.readOutput));
ProcessStartInfo processInfo = new ProcessStartInfo("povray");
processInfo.Arguments = InfoProj.getPathProj() + InfoProj.getNameProj() + ".ini";
//on déroute la sortie standard
processInfo.UseShellExecute = false;
processInfo.CreateNoWindow = true;
processInfo.RedirectStandardOutput = true;
outPov = new StringBuilder("");
povRender = new Process();
povRender.StartInfo = processInfo ;
// on utilise l'événement pour savoir quand le processus est terminé
povRender.EnableRaisingEvents = true ;
povRender.Exited += new EventHandler(this.renderEnded);
povRender.Start();
// on démarre le thread de lecture
readInfo.Start();
// on affiche la fenêtre de progression
md.Run();
textviewMain.Buffer.Text = myString ;
private void readOutput()
{
while (! povRender.HasExited)
{
StreamReader povOutPut = povRender.StandardOutput ;
myString += povOutPut.ReadLine();
}
} |
voila, je vous passe mon test de lecture asynchrone, la seul difference est que, au lieu d'un thread de lecture j'ai un DataReceivedEventHandler et j'utilise la fonction beginOutputReadLine(). Je précise que je n'ai pas d'ereur a la compilation ou l'execution mais je recupere indubitablement un string vide, alors que la "sortie de l'application" de mon IDE me montre bien les informations que je cherche a récupérer
par contre je n'ai pas tres bien saisie la difference entre lecture synchrone de la sortie et lecture asynchrone. Dans mon cas laquelle me conseilleriez vous ?
Je vous remercie d'avance pour vos reponses, en esperant avoir été le plus clair possible :roll:
Jerome