DisconnectedContext / ContextSwitchDeadlock был обнаружен - PullRequest
2 голосов
/ 11 мая 2011

У меня есть RichTextBox, в котором я веду тяжелую регистрацию сообщений из нескольких потоков.Через некоторое время я впервые получил сообщение «DisconnectedContext был обнаружен», и я удалил исключение взлома из окна Debug-> Exceptions ....Но потом я получил «ContextSwitchDeadlock был обнаружен».Я тоже убрал это, и пользовательский интерфейс вернулся к жизни.Через некоторое время он снова замерз.

Есть ли способ предотвратить это?Или есть компонент, который поддерживает раскраску, изменяя шрифты для визуальной обратной связи в .NET, например RichTextBox, но без этой ошибки?

Обнаружен ContextSwitchDeadlock
Сообщение: CLR не удалось перейти из контекста COM 0x6eb0760 в контекст COM 0x6eb08d0 в течение 60 секунд.Поток, которому принадлежит целевой контекст / квартира, скорее всего, либо делает ожидание без перекачки, либо обрабатывает очень длительную операцию без перекачки сообщений Windows.Эта ситуация, как правило, оказывает негативное влияние на производительность и может даже привести к тому, что приложение перестает отвечать на запросы или использование памяти постоянно увеличивается с течением времени.Чтобы избежать этой проблемы, все потоки однопотоковых квартир (STA) должны использовать примитивы перекачки (такие как CoWaitForMultipleHandles) и регулярно перекачивать сообщения во время длительных операций.

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Вы уверены, что обновляете RichTextBox из нескольких потоков?Если это так, вам лучше прекратить это и использовать поток пользовательского интерфейса для обновления RTB.Для этого: вызовите theForm.BeginInvoke( delegate to a method that updates the RTB)

Это должно позволить всем параллельным потокам продолжить как можно скорее, не ожидая ответа.

0 голосов
/ 31 октября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...