2011-08-04 16 views

Respuesta

5

Si redirige la Console.Out a una instancia de un StringWriter, a continuación, puede obtener el texto que se ha escrito en la consola:

StringWriter writer = new StringWriter(); 
Console.SetOut(writer); 
StringBuilder consoleOut = writer.GetStringBuilder(); 
string text = consoleOut.ToString(); 

Si lo hace dentro de un nuevo Form, a continuación, puede sondear en un intervalo para obtener el texto que se ha escrito en la consola hasta ahora y poner su valor en TextBox. Un crudo ejemplo:

public MyForm() 
{ 
    InitializeComponent(); 

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

    Timer timer = new Timer(); 
    timer.Tick += (o, s) => textBox.Text = writer.GetStringBuilder().ToString(); 
    timer.Interval = 500; 
    timer.Start(); 
} 

Algunas cosas a tener cuidado con:

  • StringWriter es desechable, por lo que técnicamente se necesita disponer de él cuando se hace (aunque en realidad su método Dispose() hace nada así que realmente no es un gran problema).
  • StringWriter mantiene un StringBuilder interno que contiene todo el texto escrito hasta el momento. Esto solo aumentará con el tiempo, de modo que cuanto más tiempo se ejecute la aplicación, más memoria consumirá. Puede poner algunos controles para borrarlos periódicamente cuando alcanza un cierto tamaño.
  • Si hace que el intervalo sea demasiado pequeño, estará constantemente usando la CPU.
  • Asegúrese de establecer Console.Out a su valor original cuando cierre el formulario, de lo contrario no podrá imprimir mensajes en la consola nuevamente.
+0

gracias por su respuesta detallada. Lo intentaré. –

+0

Aún no solucioné el problema de la memoria del generador de cadenas, pero básicamente funciona. Gracias un montón. Debería estar bien desde aquí. –

+0

Excelente respuesta por cierto. –

0

DebugView

DebugView es una aplicación que le permite controlar la salida de depuración en el sistema local, o cualquier ordenador de la red que se puede llegar a través de TCP/IP. Es capaz de mostrar tanto Kernel-mode como Win32 debug output, por lo que no necesita un depurador para capturar el resultado de depuración que generan sus aplicaciones o controladores de dispositivo, ni necesita modificar sus aplicaciones o controladores para usar depuración no estándar. salida de API.

+0

DbgView no captura la salida de la Consola, solo Depuración y Rastreo. Tampoco le permitirá mostrar la salida de la consola dentro de su propia aplicación. – adrianbanks

+0

El OP no dijo cómo se genera la salida y pensé que no le importaba una herramienta externa. Sin embargo, estoy de acuerdo en que DbgView no mostrará la salida de la consola solo en Debug and Trace. –

Cuestiones relacionadas