2011-12-27 51 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"); 
      } 
     } 

它爲我的線程也。