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.
gracias por su respuesta detallada. Lo intentaré. –
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í. –
Excelente respuesta por cierto. –