Если вы перенаправите Console.Out
на экземпляр StringWriter
, вы сможете получить текст, записанный на консоль:
StringWriter writer = new StringWriter();
Console.SetOut(writer);
StringBuilder consoleOut = writer.GetStringBuilder();
string text = consoleOut.ToString();
Если вы сделаете это в новом Form
, вы можете с интервалом опрашивать, чтобы получить текст, который был записан в консоль на данный момент, и поместить его значение в TextBox
.Грубый пример:
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();
}
Несколько вещей, с которыми нужно быть осторожным:
StringWriter
одноразовый, поэтому технически вам нужно избавиться от него, когда закончите (хотя в действительности его метод Dispose()
ничего не делает, так что на самом деле это не большая проблема). StringWriter
сохраняет внутренний StringBuilder
, содержащий весь текст, записанный в него до сих пор.Со временем это будет только увеличиваться, поэтому чем дольше будет работать ваше приложение, тем больше памяти оно будет использовать.Вы могли бы поставить некоторые проверки, чтобы периодически очищать его, когда он достигает определенного размера. - Если вы сделаете интервал слишком малым, вы будете постоянно использовать CPU.
- Обязательно установите
Console.Out
вернуться к исходному значению при закрытии формы, иначе вы не сможете снова печатать сообщения на консоли.