这一步关键是要把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的源码不知道是怎么构造的,有时间摸索一下争取下次把他缩短至两行左右吧