Странное сообщение о потоках в C#

У меня есть программа, которую я запускаю, и в середине я получаю это сообщение:

Управляемая Отладка Помощника 'ContextSwitchDeadlock' обнаружила проблему в 'C:\Documents and Settings\Lena G\My Documents\SchoolStuff\IR Information\Home Work\FianlProject\finalProject\finalProject\bin\Debug\finalProject.vshost.exe'. Дополнительная информация: CLR не мог перейти от контекста COM 0x3407968 к контексту COM 0x3407ad8 в течение 60 секунд. Поток, который владеет целевым контекстом/квартирой, скорее всего, или делает, не нагнетание ожидают или обработка очень длинной рабочей операции, не качая сообщения Windows. Эта ситуация обычно оказывает отрицательное влияние производительности и может даже привести к становлению приложения не быстро реагирующее или использование памяти, накапливающееся постоянно со временем. Для предотвращения этой проблемы все потоки единственной потоковой квартиры (STA) должны использовать нагнетание, ожидают примитивы (такие как CoWaitForMultipleHandles) и обычно качают сообщения во время длительных операций.

Я понимаю, что это имеет некоторое отношение к тому, что это работает в течение 60 секунд, не останавливаясь или чего-то как этот? Как это - проблема? Я также поместил [STAThread] перед основным моей программы, потому что, если я удаляю его затем, это показывает мне это сообщение:

Необработанное исключение типа 'Система. Поточная обработка. ThreadStateException' произошел в Дополнительной информации System.Windows.Forms.dll: Текущий поток должен быть установлен на режим единственной квартиры потока (STA), прежде чем вызовы OLE смогут быть выполнены. Удостоверьтесь, что Вашей Основной функции отметили STAThreadAttribute на нем. Это исключение только повышено, если отладчик присоединен к процессу.

Кто-либо знает, как я могу решить эту проблему?

Заранее спасибо,

Lena

5
задан 8 February 2010 в 18:43
поделиться

2 ответа

Это предупреждение, которое генерируется, когда вы вызываете объект ActiveX из фонового потока и ваш основной поток заблокирован. Возможно, более вероятно: в розничной версии Visual Studio 2005 была ошибка, из-за которой это предупреждение появлялось без уважительной причины. Он был исправлен в Service Pack 1, убедитесь, что он у вас установлен. Еще один обходной путь - закрыть его. Отладка + исключения, помощники по управляемой отладке, снимите флажок с предупреждения ContextSwitchDeadlock. Но используйте SP1, если у вас его нет.

1
ответ дан 15 December 2019 в 06:25
поделиться

Вам необходимо убедиться, что ваш поток, которому принадлежит компонент COM, не "заблокирован" обработкой в ​​течение> 60 секунд.

Вероятно, у вас есть COM-объект в форме, и вы выполняете работу над потоком пользовательского интерфейса. Если ваш пользовательский интерфейс блокируется обработкой более 60 секунд, компонент COM может пожаловаться.

Рассмотрите возможность использования экземпляра BackgroundWorker для обработки вашего длительного процесса. Это перенесет работу в фоновый поток и позволит компоненту COM обрабатывать сообщения без жалоб.

2
ответ дан 15 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: