У меня есть класс в С# (.net 3.5 cp, vs2010), который выполняет сложные компультации, которые обычно занимают много времени. Через минуту возникает исключение, которое обнаружено ContextSwitchDeadlock. Исключение локализовано, на мой неанглийский язык, поэтому я не могу скопировать его, но смысл следующий: ¨ Модуль CLR не мог перейти из контекста COM... в контекст COM... в течение 60 секунд. Подпросы, которые владеют целевым контекстом/квартирой, вероятно, выполняют неперекачиваемое ожидание или обработку очень продолжительной работы без перекачки системных сообщений Windows.
В основном, похоже, что мое приложение много времени обрабатывает и не реагирует на окна, а визуальная студия отключает его и сообщает о вероятном тупике.
Я пытался провести некоторое исследование и нашел два решения:
-
Отключите в Visual Studio debbuger опцию для обнаружения взаимоблокировок. Dost не работает для меня, потому что он работает только для целей отладки.
-
Вызов метода DoEvents, но он был для форм Windows, а не WPF, и я использую WPF.
Было также предложение создать отдельный поток, но я совершенно новый для потоковой обработки и не знаю, что мне делать. Любые предложения, пожалуйста?