2011-10-25 4 views
6

J'utilise la bibliothèque externe (.dll), certaines de ses méthodes (y compris les constructeurs) écrivent du contenu sur la sortie standard (console a.k.a) car elle était destinée à être utilisée avec des applications console. Cependant j'essaye de l'incorporer dans mes applications de formes de fenêtres, ainsi je voudrais capturer cette sortie et l'afficher d'une manière que j'aime. C'est à dire. "statut" champ de texte dans ma fenêtre. Tout ce que j'ai pu trouver était ProcessStartInfo.RedirectStandardOutput, mais apparemment, il ne correspond pas à mes besoins, car il est utilisé avec une application supplémentaire (.exe) dans les exemples. Je n'exécute pas d'applications externes, j'utilise juste une bibliothèque dll.Capturer le contenu de la sortie standard en C#

Répondre

7

Créer une StringWriter et définissez la sortie standard à elle.

StringWriter stringw = new StringWriter(); 
Console.SetOut(stringw); 

Maintenant, quoi que ce soit imprimé à la console sera insérée dans le StringWriter, et vous pouvez obtenir son contenu à tout moment en appelant stringw.ToString() alors vous pourriez faire quelque chose comme textBox1.AppendText(stringw.ToString()); (puisque vous avez dit que vous aviez un WinForm et avait un statut champ de texte) pour définir le contenu de votre zone de texte.

2

L'utilisation de la méthode Console.SetOut vous rapprochera-t-elle suffisamment de ce que vous recherchez?

Il vous donnerait la possibilité d'obtenir le texte écrit sur la console dans un flux que vous pourriez écrire quelque part de toute façon.

http://msdn.microsoft.com/en-us/library/system.console.setout.aspx

Extrait du lien ci-dessus:

Console.WriteLine("Hello World"); 
FileStream fs = new FileStream("Test.txt", FileMode.Create); 
// First, save the standard output. 
TextWriter tmp = Console.Out; 
StreamWriter sw = new StreamWriter(fs); 
Console.SetOut(sw); 
Console.WriteLine("Hello file"); 
Console.SetOut(tmp); 
Console.WriteLine("Hello World"); 
sw.Close(); 
Questions connexes