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 :
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
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 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(); } }
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
Jerome
Partager