gpt4 book ai didi

c# - 如何在 C# 中的自定义跟踪监听器上调用 dispose

转载 作者:太空宇宙 更新时间:2023-11-03 11:38:08 24 4
gpt4 key购买 nike

我编写了一个扩展 TextWriterTraceListener 的自定义跟踪监听器。

现在,我该如何调用监听器上的 Dispose()?我通过我的项目的 app.config 添加它。

尝试在终结器中添加调用 Dispose(false),但未调用它。奇怪的是,它在 VS 2010 中被调用,但在我运行应用程序时没有被调用,但我知道不能保证 GC 收集。 (基本上这在 nunit 测试中用于记录来自测试的 System.Net.Socket 调用,我需要在所有测试运行后做一些后处理并将其写入日志。我在 Dispose 中添加了这部分( ) )

App.config 片段:

<sources>
<source name="System.Net.Sockets" tracemode="protocolonly" maxdatasize="10240">
<listeners>
<add name="CustomTraceListener" type="Tests.Custom.MyTest.CustomTraceListener, Tests.Custom.MyTest" initializeData="custom.log" />
</listeners>
</source>
</sources>

一些代码片段:

    ~CustomTraceListener()
{
Dispose(false);
}

protected override void Dispose (bool disposing)
{
base.Write(customProcessor.PostProcess());
base.Flush();
base.Dispose(disposing);
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

最佳答案

我必须编写一个 SetUpFixture 并在 TearDown 中,使用一些反射从程序集中获取类型“System.Diagnostics.TraceSource”,得到一个私有(private)静态字段,它是所有跟踪源的列表,并在上调用 Dispose()我的自定义监听器。

FieldInfo[] info = ts.GetType().Assembly.GetType("System.Diagnostics.TraceSource").GetFields(BindingFlags.NonPublic | BindingFlags.Static);

对 TraceSource 上的所有监听器调用 Dispose()

foreach (TraceListener listener in s.Listeners)
{
listener.Dispose();
Console.WriteLine("disposing");
}

关于c# - 如何在 C# 中的自定义跟踪监听器上调用 dispose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5570143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com