【发布时间】:2015-03-25 23:47:31
【问题描述】:
我有一个程序可以测试不同程序的 c# 脚本。当编写脚本时,可以使用Debug.Writeline或Trace.Writeline方法并将文本写入richtextbox,我希望不同方法的文本具有不同的颜色,Debug为橙色,Trace为蓝色。
就在我运行脚本之前
System.Diagnostics.Trace.Listeners.Add(new TextboxTraceListener(outputTxt, "ScriptTraceListener", Color.DarkBlue));
System.Diagnostics.Debug.Listeners.Add(new TextboxTraceListener(outputTxt, "ScriptDebugListener", Color.DarkOrange));
脚本运行后是
System.Diagnostics.Trace.Listeners.Remove("ScriptTraceListener");
System.Diagnostics.Debug.Listeners.Remove("ScriptDebugListener");
TextBoxTraceListener 是
class TextboxTraceListener : TraceListener
{
private DebugRichTextbox output;
private Color textColor;
public TextboxTraceListener(DebugRichTextbox output) :this(output, "RichTextboxTraceListener", Color.Black)
{
}
public TextboxTraceListener(DebugRichTextbox output, string name, Color textColor)
{
this.Name = name;
this.output = output;
this.textColor = textColor;
}
public override void Write(string message)
{
Action write = delegate() { output.write(message, this.textColor); };
if (output.InvokeRequired)
{
IAsyncResult result = output.BeginInvoke(write);
output.EndInvoke(result);
}
else
{
write();
}
}
public override void WriteLine(string message)
{
Action writeLine = delegate() { output.writeLine(message, this.textColor); };
if (output.InvokeRequired)
{
IAsyncResult result = output.BeginInvoke(writeLine);
output.EndInvoke(result);
}
else
{
writeLine();
}
}
}
似乎 Debug.Writeline 和 Trace.Writeline 消息被两个侦听器捕获,并且消息只是在蓝色和橙色的 Richtextbox 中重复。有没有办法判断消息是来自TextBoxTraceListener中的Debug还是trace?
谢谢, 欧根
【问题讨论】:
-
Trace 和 Debug 是相同的,只是 Trace 侦听器可以在 Debug 和 Release 模式下读取,但 Debug 侦听器不能在 Release 模式下读取。您可能有一个解决方法,提供仅使用 Trace 编写文本的自定义类(调试和跟踪),您可以区分它们类中的颜色。
标签: c# trace tracelistener