2011-12-27 52 views
3

我想我已经失去了我的思想家伙。根据MSDN,TraceSource是线程安全的。所以我有一个简单的控制台应用。在这里,我宣布;跨线程的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

我添加了一个TextWriterListener来查看它是否只是控制台 - 相同的效果,它不写。 – XeroxDucati 2011-12-28 01:33:21

回答

1

做傻事的才是傻瓜呢..使用tracesource时,确实有助于包括我用下面的配置的配置的一部分。这

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"); 
      } 
     } 

它为我的线程也。