我想将Debug stdout流重定向到文本块。有没有一种简单的方法可以做到这一点?
感谢。
答案 0 :(得分:4)
添加自定义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.AppendText(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);
答案 1 :(得分:2)
将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";
}
}
答案 2 :(得分:0)
WP7似乎没有解决方案。 我想我必须等下一个版本。