繁体   English   中英

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

[英]Redirect Debug.WriteLine stream to a textblock

我想将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.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);

将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似乎没有解决方案。 我想我必须等下一个版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM