После многих лет мучений я, наконец, нашел причину и решение в этом вопросе переполнения стека: vs2010 Debug.WriteLine перестает работать
Кажется, что Visual Studio выполняет отладку.writeline не может обрабатывать несколько процессов, каждый из которых использует несколько потоков правильно.В конечном итоге эти 2 процесса заблокируют часть Visual Studio, которая обрабатывает вывод, и перестанут работать.
Решение состоит в том, чтобы обернуть ваши вызовы к debug.writeline в классе, который синхронизируется между процессами с использованием именованного мьютекса.,Это предотвращает одновременную запись и отладку нескольких процессов, что позволяет избежать проблемы тупиковой ситуации.
Оболочка:
public class Debug
{
#if DEBUG
private static readonly Mutex DebugMutex =new Mutex(false,@"Global\DebugMutex");
#endif
[Conditional("DEBUG")]
public static void WriteLine(string message)
{
DebugMutex.WaitOne();
System.Diagnostics.Debug.WriteLine(message);
DebugMutex.ReleaseMutex();
}
[Conditional("DEBUG")]
public static void WriteLine(string message, string category)
{
DebugMutex.WaitOne();
System.Diagnostics.Debug.WriteLine(message,category);
DebugMutex.ReleaseMutex();
}
}
Или для тех, кто использует VB.NET:
Imports System.Threading
Public Class Debug
#If DEBUG Then
Private Shared ReadOnly DebugMutex As New Mutex(False, "Global\DebugMutex")
#End If
<Conditional("DEBUG")> _
Public Shared Sub WriteLine(message As String)
DebugMutex.WaitOne()
System.Diagnostics.Debug.WriteLine(message)
DebugMutex.ReleaseMutex()
End Sub
<Conditional("DEBUG")> _
Public Shared Sub WriteLine(message As String, category As String)
DebugMutex.WaitOne()
System.Diagnostics.Debug.WriteLine(message, category)
DebugMutex.ReleaseMutex()
End Sub
End Class