Redirection de la sortie d'une application console externe vers la listbox d'une winform

Soyez le premier à donner votre avis sur cette source.

Vue 13 856 fois - Téléchargée 719 fois

Description

En réponse à ma propre question ;)
(http://www.csharpfr.com/infomsg_PROCESS-AVEC-OUTPUT-DANS-TEXTBOX_985135.aspx)

Une application winform avec une listbox et 2 boutons (start et cancel).
Une application console qui écrit toutes les secondes une ligne.

La application winform lance l'application console, mais la console reste caché, et le texte affiché normalement dans la console est redirigé vers la listbox.

Source / Exemple :


this.myProcess = new Process();
this.myProcess.EnableRaisingEvents = true;
this.myProcess.Exited += new System.EventHandler(this.myProcess_Exited);
this.myProcess.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(this.myProcess_ErrorDataReceived);
this.myProcess.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(this.myProcess_OutputDataReceived);

this.myProcessStartInfo.RedirectStandardError = true;
this.myProcessStartInfo.RedirectStandardOutput = true;

this.myProcessStartInfo.UseShellExecute = false;
this.myProcessStartInfo.CreateNoWindow = true;

this.myProcess.Start();
this.myProcess.BeginErrorReadLine();
this.myProcess.BeginOutputReadLine();

Conclusion :


Pour lancer l'application Console, on utilise la class System.Diagnostics.Process
Des évènements sont gérés pour récupèrer la sortie de la console.

C'est du très vite fait, c'est juste pour donner UNE des solutions pour rediriger une application Console vers une application winform!

Keyser ;)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
14
Date d'inscription
mardi 26 août 2003
Statut
Membre
Dernière intervention
25 mai 2009

Petite réponse à un problème avec les accents :

Pour avoir les caractères accentués, il faut faire 2 choses:
- dans l'appli console déclarer :
Console.OutputEncoding = Encoding.UTF8;
- et à l'initialisation du process :
this.myProcessStartInfo.StandardOutputEncoding = Encoding.UTF8;

Merci Christopher ;)
Messages postés
8
Date d'inscription
jeudi 27 novembre 2003
Statut
Membre
Dernière intervention
15 février 2009

Bonjour,

Jai une erreur lorsque je laisse un peu longtemps .
J'ai bien process terminé, j'attends un peu et hop visual studio me met une erreur " can't be null" pour la ligne:
private void myProcess_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
this.WriteText(e.Data);
}

Aurait tu une idée ?
D'avance merci
Cordialement
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
7 juin 2008

Merci de cette source bien utile qui m'a permis de comprendre comment fonctionne les événements Exited, ErrorDataReceived et OutputDataReceived dans le cas d'un processus suite à une commande DOS

Minimulot :-)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.