Debugstdoutストリームをテキストブロックにリダイレクトしたいと思います。それを行う簡単な方法はありますか?
ありがとう。
Debugstdoutストリームをテキストブロックにリダイレクトしたいと思います。それを行う簡単な方法はありますか?
ありがとう。
聞きたい出力にカスタム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);
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の解決策はないようです。次のバージョンを待たなければならないと思います。