這一步關鍵是要把debug的內容提煉出來,這一步比較麻煩的地方在於這個時間點很難做,不能通過事件句柄的方式去觸發,所以需要重新繼承一下System.Diagnostics.StringWriter。(關於System.Diagnostics.Debug.Listeners和System.Diagnostics.TextWriterTraceListener的關係及StringWriter的用法可以參考官方文檔)
繼承完(帶參數改造)的類如下:
class MyStringWriter : StringWriter
{
StringBuilder sb;
TextBox tb;
public MyStringWriter(TextBox tb,StringBuilder sb):base(sb)
{
this.sb = sb;
this.tb = tb;
}
public override void Write(char[] buffer, int index, int count)
{
base.Write(buffer, index, count);
tb.Text = sb.ToString();
}
}
關於這個類的用法如下:
StringBuilder sb = new StringBuilder(tb_log.Text);
MyStringWriter sw = new MyStringWriter(tb_log,sb);
System.Diagnostics.TextWriterTraceListener t = new System.Diagnostics.TextWriterTraceListener(sw);
System.Diagnostics.Debug.Listeners.Add(t);
這次的代碼非常囉嗦,初始化需要整整4行代碼,原因主要在TextWriterTraceListener的源碼不知道是怎麼構造的,有時間摸索一下爭取下次把他縮短至兩行左右吧