3

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

谢谢。

4

3 回答 3

5

将自定义 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);
于 2013-06-03T10:12:34.660 回答
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";
   }

}
于 2012-06-08T14:32:23.123 回答
0

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

于 2012-06-25T10:14:53.207 回答