将 Debug.WriteLine 流重定向到 TextBlock

3
我想将Debug的标准输出流重定向到一个文本块中。有没有简单的方法可以做到这一点?谢谢。

你是想针对你的代码做这个,还是也包括框架? - Rowland Shaw
3个回答

6

添加自定义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.Listeners.Add(tbtl);

2
我建议使用tBox.AppendText(msg)而不是tBox.Text += msg - Lessan Vaezi
很好的建议 @LessanVaezi,我已经根据您的建议更新了答案。 - wal5hy
1
旧答案,但是.AppendText(msg)是TextBox的一个方法,而不是来自TextBox.Text。 - Victor A. Parcianello Benso

2
在您的调试中添加一个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";
   }

}

Windows Phone 7似乎不支持这些类。 - Matthieu Oger
@Ashen 对不起,我已经更新了答案,包括另一种可能有效的替代方案。 - Chris
1
Silverlight 没有 TraceListeners,因此您的替代方案不起作用。 - Luke Woodward

0

看起来 WP7 没有解决方案。 我想我必须等待下一个版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接