3

Debugstdoutストリームをテキストブロックにリダイレクトしたいと思います。それを行う簡単な方法はありますか?

ありがとう。

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.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 に答える