跟踪autoflush如何影响多线程.Net应用程序中的跟踪?

时间:2015-09-23 22:41:48

标签: c# .net multithreading system.diagnostics

我在从其他线程内部获取TextWriterTraceListener的Trace功能时遇到了一些问题。我的代码如下。

class Program
    {
        private static TraceSource mySource =
            new TraceSource("TraceSourceApp");
        static void Main(string[] args)
        {
            Activity1();
            mySource.Close();

            Task.Run(() => mySource.TraceEvent(TraceEventType.Warning, 90, string.Format("log from thread {0}", Thread.CurrentThread.ManagedThreadId)));

            return;
        }
        static void Activity1()
        {
            mySource.TraceEvent(TraceEventType.Error, 1, "Error message2.");
            mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message2.");
            mySource.TraceEvent(TraceEventType.Warning, 90, "Warning from main thread");
        }
    }

的App.config

    

<sources>
  <source name="TraceSourceApp"
    switchName="sourceSwitch"
    switchType="System.Diagnostics.SourceSwitch">
    <listeners>
      <add name="console"
        type="System.Diagnostics.ConsoleTraceListener">

      </add>
      <add name="myListener"/>
      <remove name="Default"/>
    </listeners>
  </source>
</sources>
<switches>
  <add name="sourceSwitch" value="4"/>
</switches>
<sharedListeners>
  <add name="myListener"
    type="System.Diagnostics.TextWriterTraceListener"
    initializeData="myListener.log">

  </add>
</sharedListeners>

当我设置autoflush = false时,myListener.log文件中不会生成从非UI线程添加的跟踪。它仅在autoflush为真时才有效。虽然可以在控制台中看到跟踪。这可能是什么原因?

0 个答案:

没有答案