将 Debug.WriteLine 流重定向到文本块
本文关键字:文本 重定向 Debug WriteLine | 更新日期: 2023-09-27 18:36:39
我想将调试标准输出流重定向到文本块。有没有简单的方法可以做到这一点?
谢谢。
将自定义跟踪侦听器添加到要侦听的输出。
这是一个简单的类,它扩展了 TraceListener 并采用要在构造函数中更新的文本框
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.Listeners.Add(tbtl);
将 TextWriterListener (http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener.aspx) 添加到调试中,并使用生成的流的 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似乎没有解决方案。我想我必须等待下一个版本。