Phionix11 Ответов: 3

Ошибка в приложении windows: длительная работа без перекачки сообщений Windows


Всем Привет,

У меня есть приложение, в котором я получаю ошибку

"CLR не удалось перейти из контекста COM
0x2183e0 в COM - контекст 0x218550 в течение 60 секунд.
Поток, которому принадлежит целевой контекст/квартира
скорее всего это либо выполнение ожидания без накачки либо обработка
очень длительная работа без перекачки сообщений Windows.
Эта ситуация обычно оказывает негативное влияние на производительность
и может даже привести к тому, что приложение перестанет реагировать
или использование памяти, постоянно накапливающейся с течением времени. Избегать
эта проблема, все однопоточные квартирные (STA) потоки
следует использовать примитивы ожидания прокачки (например
CoWaitForMultipleHandles) и регулярно перекачивать сообщения
во время длительных операций."


Мое заявление находится в VB.NET на базе windows.

В моем приложении я использовал поток, который работает непрерывно, и в какой-то момент времени он дает мне эту ошибку.

На этот вопрос я снят визуальные студии "отладка-&ГТ;исключения-&ГТ;управляемый помощник по отладке(MDA)" здесь под бросок колонки у меня снят "DisconnectedContext" и "кода contextswitchdeadlock". Но все же не удалось обнаружить главную проблему....

Пожалуйста предложите если таковые имеются

3 Ответов

Рейтинг:
27

Dave Kreskowiak

Я видел это раньше и обнаружил, что это ошибка, которая появляется только тогда, когда ваше приложение работает под отладочной сборкой под отладчиком. Сборка выпуска, работающая вне Visual Studio, вообще никогда не покажет эту проблему.


tnashc

Мое приложение выдало мне эту ошибку, даже когда я запустил его в режиме выпуска.

Dave Kreskowiak

Если вы запустите его под отладчиком, он выдаст это сообщение. Если вы запускаете релиз за пределами Visual Studio, этого не происходит.

Рейтинг:
1

Member 11969558

Я уже сталкивался с этим сообщением об ошибке.
Я читал о решениях, связанных с этим сообщением здесь: https://social.msdn.microsoft.com/Forums/office/en-US/320459e9-7247-41a2-a24e-7eda359b2686/contextswitchdeadlock-occurred?forum=csharpgeneral

Откройте "Настройки Исключений" (Ctrl+Alt+E)
В Разделе "Управляемые Помощники Отладки"
Нам нужно сделать uncheck "ContextSwitchDeadlock", он может решить эту ошибку.

по отношению.
Kwn по


Рейтинг:
0

Gjuro Kladaric

Как использовать "CoWaitForMultipleHandles" ?[^]

Кажется, что это просто особенность отладчика, и если вы его выключите, он больше не сломается.

Я только что нашел это, и это сработало для моего VB.NET консольное приложение (хотя я не понимаю, что такое связь между "насосом сообщений" (который звучит так windows-ly) и консольным приложением).