其他分享
首页 > 其他分享> > 跨线程的TraceSource不起作用?

跨线程的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