将Debug.WriteLine流重定向到文本块

我想将Debug stdout流重定向到文本块。 有一个简单的方法吗?

谢谢。

添加自定义Tracelistener以输出您想要收听的内容。

这是一个简单的类,它扩展了TraceListener并获取了构造函数中要更新的TextBox

class TextBoxTraceListener : TraceListener { private TextBox tBox; public TextBoxTraceListener(TextBox box) { this.tBox = box; } public override void Write(string msg) { //allows tBox to be updated from different thread tBox.Parent.Invoke(new MethodInvoker(delegate() { tBox.Text += msg; })); } public override void WriteLine(string msg) { Write(msg + "\r\n"); } } 

在窗体代码初始化后,在创建窗体的句柄后初始化TextBoxTraceListener:

  protected override void OnHandleCreated(EventArgs e) { TextBoxTraceListener tbtl = new TextBoxTraceListener(TheTextBox); Debug.Listeners.Add(tbtl); Debug.WriteLine("Testing Testing 123"); } 

完成。 如果要监听Trace而不是Debug输出:

 Trace.Listeners.Add(tbtl); 

将TextWriterListener( http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener.aspx )添加到Debug中,并使用生成的流的ReadToEnd()调用让侦听器将其内容刷新到您的文本中。

如果没有,您可以为表单实现自己的监听器并将其输出到文本框。 像这样的东西应该可以解决这个问题,即持有TextBox的表单也实现了这个TextListener,并且textBox被传递给了监听器。

 class TextListener : TraceListener { private TextBox tBox; TextListener( TextBox box) { this.tBox = box; } public override void Write(string msg) { if(box== null) return; box.Text += msg; } public override void WriteLine(string msg) { if(HandleText == null) return; Write(msg); box.Text += "\r\n"; } } 

WP7似乎没有解决方案。 我想我必须等下一个版本。