我在从其他线程内部获取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为真时才有效。虽然可以在控制台中看到跟踪。这可能是什么原因?