跨线程的TraceSource不起作用?

时间:2011-12-27 23:52:50

标签: c# c#-4.0 system.diagnostics

我想我已经失去了理智......根据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实例,并且集合中有一个监听器,但控制台中没有任何东西。

这是控制台监听器中的错误吗?我错过了什么吗?

2 个答案:

答案 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时,真的有助于包含配置的一部分..