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 に答える