我想我已经失去了理智......根据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实例,并且集合中有一个监听器,但控制台中没有任何东西。
这是控制台监听器中的错误吗?我错过了什么吗?
答案 0 :(得分:3)
我使用了以下配置。
<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");
}
}
它也适用于线程。
答案 1 :(得分:1)
愚蠢是愚蠢的..当使用traceource时,真的有助于包含配置的一部分..