很抱歉,如果我在某个地方错过它,但是如果框架自动处置了TraceListener
,我找不到任何文档。
如果我使用此代码:
var traceListener = new DailyTraceListener("Logs", true);
Trace.Listeners.Add(traceListener);
假设需要调用traceListener.Dispose()
使其正常工作,我是否需要手动调用Dispose
?请注意,如果Dispose
第二次被调用,则实现将引发错误(我正在尝试对其进行更改)。
在this article中:
TraceSource处理监听器
在这种情况下,TraceSource
在哪里?它会自动处置吗?
简而言之,程序退出时是否保证Dispose
被.NET调用?
答案 0 :(得分:0)
我自己做了测试。似乎从来没有自然地调用过它。这是演示代码:
class Program
{
static void Main(string[] args)
{
var listener = new TestTraceListener();
Trace.Listeners.Add(listener);
Trace.WriteLine("Test");
listener.Dispose();
Trace.WriteLine("After dispose");
}
}
public class TestTraceListener : TraceListener
{
public override void Write(string message)
{
File.AppendAllText("log.log", message);
}
public override void WriteLine(string message)
{
this.Write(message + Environment.NewLine);
}
protected override void Dispose(bool disposing)
{
this.WriteLine("Dispose called");
base.Dispose(disposing);
}
~TestTraceListener()
{
this.WriteLine("Destructor called");
}
}
我的文本文件是:
测试
处置被叫
处理后
之后,我尝试删除Dispose
调用(// listener.Dispose();
),结果如下:
测试
处理后
结论:如果程序自然退出,则默认情况下不会调用Dispose
。