.NET - Обнаружен ContextSwitchDeadlock

У меня есть класс в C # (.net 3.5 cp, vs2010), который выполняет сложные операции, которые обычно занимают много времени. Через минуту возникает исключение, что обнаружен ContextSwitchDeadlock. Исключение локализовано на мой неанглийский язык, поэтому я не могу скопировать вставку, но смысл следующий: ¨ Модуль CLR не может перейти из контекста COM ... в контекст COM ... для 60 секунд.Подпроцессы, которым принадлежит целевой контекст / квартира, вероятно, выполняют ожидание без перекачки или обрабатывают очень длительную операцию без перекачки системных сообщений Windows.

По сути, похоже, что мое приложение выполняет вычисления и долгое время не отвечает на запросы Windows, и Visual Studio закрывает его и сообщает о вероятной тупиковой ситуации.

Я пытался провести небольшое исследование и нашел два решения:

  1. Отключить некоторые опции в отладчике Visual Studio для обнаружения взаимоблокировок. Не работает для меня, потому что он работает только для целей отладки.

  2. Вызов некоторого метода DoEvents, но он был для форм Windows, а не WPF, и я использую WPF.

Также было предложение создать отдельный поток, но я новичок в потоках и не знаю, что мне делать. Есть предложения, пожалуйста?

17
задан 12 November 2011 в 17:26
поделиться