跨线程的TraceSource不起作用?
作者:互联网
我想我已经失去了头脑..根据MSDN,TraceSource是线程安全的.所以我有一个简单的控制台应用程序.在其中声明:
private static readonly TraceSource ActiveTraceSource = new TraceSource("Test");
在我的app.config中,我有;
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
</listeners>
</trace>
</system.diagnostics>
在我的main()中,我做类似的事情;
ActiveTraceSource.TraceInformation("Hi!");
作品棒极了,我有嗨!在我的控制台上.然后我做这个;
new Thread(DoWork).Start();
在DoWork内部,我做同样的事情.
ActiveTraceSource.TraceInformation("Hi!");
应该可以工作,但是我不会得到第二个“嗨!”.设置一个断点会告诉我DoWork有一个ActiveTraceSource实例,并且集合中有一个侦听器,但控制台中没有.
这是控制台侦听器中的错误吗?我想念什么吗?
解决方法:
我使用以下配置.
<system.diagnostics>
<sources>
<source name="Test" switchValue="All">
<listeners>
<add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
</listeners>
</source>
</sources>
</system.diagnostics>
测试代码:
class Program
{
private static readonly TraceSource ActiveTraceSource = new TraceSource("Test");
static void Main(string[] args)
{
ActiveTraceSource.TraceInformation("Hi");
Thread th = new Thread(new ThreadStart(Test));
th.Start();
Console.ReadLine();
}
static void Test()
{
ActiveTraceSource.TraceInformation("Hi");
}
}
它也对我有效.
标签:system-diagnostics,c-4-0,c 来源: https://codeday.me/bug/20191101/1986935.html