2011-10-25 19 views
6

Estoy utilizando una biblioteca externa (.dll), algunos de sus métodos (incluidos los constructores) escriben cosas en la salida estándar (una consola a.k.a) porque estaba destinado a ser utilizado con aplicaciones de consola. Sin embargo, estoy tratando de incorporarlo a las aplicaciones de formularios de Windows, así que me gustaría capturar esta salida y mostrarla de la manera que prefiera. Es decir. campo de texto "estado" dentro de mi ventana.Capturar contenidos de salida estándar en C#

Todo lo que pude encontrar fue ProcessStartInfo.RedirectStandardOutput, aunque aparentemente no se ajusta a mis necesidades, porque se usa con una aplicación adicional (.exe) en ejemplos. No estoy ejecutando aplicaciones externas, solo estoy usando una biblioteca dll.

Respuesta

7

Crear una StringWriter y establezca la salida estándar a la misma.

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

Ahora, cualquier cosa impresa a la consola se inserta en el StringWriter, y usted puede conseguir su contenido en cualquier momento llamando stringw.ToString() así entonces usted podría hacer algo como textBox1.AppendText(stringw.ToString()); (ya que dijo que tenía un WinForm y tenía un estatus campo de texto) para establecer el contenido de su cuadro de texto.

2

¿Usaría el método Console.SetOut para acercarse lo suficiente a lo que busca?

Le proporcionará la capacidad de hacer que el texto escrito en la consola en una secuencia que puede escribir en algún lugar de todos modos.

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

Extracto del enlace de arriba:

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(); 
Cuestiones relacionadas