запись в TraceListener из нескольких потоков - PullRequest
1 голос
/ 19 января 2011

У меня есть пользовательский TraceListener и два потока. Сообщения трассировки поступают только из первого потока, а сообщения Trace.Write () второго потока не проходят. Я попытался использовать один глобальный TraceListener, к которому имеют доступ оба потока, но второй поток все еще не выдает никаких результатов.

Как мне реализовать это так, чтобы оба потока записывали в один и тот же вывод Trace? Если слушатель трассировки использует блокировку соответствующим образом, возможно ли это сделать?

void Initialize()
{
    Trace.Listeners.Add(App.CustomTraceListener);
    Trace.Write("test?"); // this produces output
    var start = new ThreadStart(Run);
    var thread = new Thread(start);
    thread.Start();
}

void Run()
{
    while(true)
    {
      Thread.Sleep(1000);
      Trace.Write("hello from second thread"); // this does not produce anything
    }
}

Ответы [ 2 ]

3 голосов
/ 06 июня 2011

Также добавление Trace.AutoFlush = true также работает хорошо.

1 голос
/ 19 января 2011

Позвоните Trace.Flush(); после thread.Start(); или внутри Run();, и вы увидите вывод.

...