3

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 被正确附加。问题是我不断地向控制台提供非常大的数据(通过Process调用启动的非常详细的批处理的输出cmd.exe

process.OutputDataReceived += (s, e) =>
{
    if (e.Data != null)
    {
        Console.WriteLine(e.Data);
    }
};

这里的问题是这会减慢整个应用程序的速度(特别是我在馈送期间启动的线程)。我的想法是手动控制写作频率。但是我觉得这是一个普遍的问题,我不想重新发明轮子。有什么建议么 ?

4

1 回答 1

1

我最终不再使用控制台。我的应用程序确实不需要控制台。

process.OutputDataReceived += (s, e) =>
{
    if (e.Data != null)
    {
        consoleTextBox.AppendText(e.Data);
    }
};

我的解决方案比上面的代码更复杂,因为我使用了线程(这首先让我感到困惑,让我认为使用控制台很聪明)。

于 2013-02-06T10:31:07.807 回答