如何在不降低应用程序速度的情况下将详细控制台重定向到C#中的TextBox
本文关键字:控制台 重定向 TextBox 中的 情况下 速度 应用程序 | 更新日期: 2023-09-27 17:57:36
我正在使用以下设置将控制台重定向到TextBox
:
public partial class WindowMain : Window
{
public WindowMain()
{
InitializeComponent();
TextWriter writer = new TextBoxStreamWriter(consoleTextBox);
Console.SetOut(writer);
}
}
具有类别TextBoxStreamWriter
:
public class TextBoxStreamWriter : TextWriter
{
TextBox _output = null;
public TextBoxStreamWriter(TextBox output)
{
_output = output;
}
public override void Write(char value)
{
base.Write(value);
_output.Dispatcher.Invoke(new Action(() =>
{
_output.AppendText(value.ToString());
})
);
}
}
这是有效的。当我在应用程序中调用Console.Write
时,我的TextBox会被正确附加。问题是我不断地向控制台提供非常大的数据(通过调用cmd.exe
的Process
启动的非常详细的批处理的输出)
process.OutputDataReceived += (s, e) =>
{
if (e.Data != null)
{
Console.WriteLine(e.Data);
}
};
这里的问题是,这会减慢整个应用程序的速度(尤其是我在馈送期间启动的线程)。我的想法是手动控制写作频率。然而,我觉得这是一个常见的问题,我不想重新发明轮子。有什么建议吗?
我最终不再使用控制台了。我的应用程序实际上不需要控制台。
process.OutputDataReceived += (s, e) =>
{
if (e.Data != null)
{
consoleTextBox.AppendText(e.Data);
}
};
我的解决方案比上面的代码更复杂,因为我使用线程(这正是我最初感到困惑的地方,让我认为使用控制台是明智的)。