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);
}
};
ここでの問題は、これがアプリケーション全体 (特に、フィード中に起動するスレッド) を遅くしていることです。私の考えは、書き込みの頻度を手動で制御することです。ただし、これはよくある問題だと思います。車輪の再発明はしたくありません。助言がありますか ?