Обнаружено событие ContextSwitchDeadlock #694922


#0 by batmansoft
Visual studio C# выдает сообщение: "Обнаружено событие ContextSwitchDeadlock Message: CLR не удалось перейти из COM-контекста 0xe7c080 в COM-контекст 0xe7c138 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций. " подскажите пожалуйста, как лечить?
#1 by iamnub
Используй примитивы ожидания для прокачки.
#2 by batmansoft
что такое "примитивы ожидания для прокачки"?
#3 by Torquader
У вас многопоточный объект, живущий в каком-то процессе, который не умеет корректно отрабатывать запросы от других приложений. Также вероятно, что объекту дали длительное задание, которое он не успел выполнить - в многопоточном объекте задания для какого-то конкретного потока должны выполняться в отдельном потоке, если они занимают много времени - иначе придётся читать не очень понятные сообщения.
#4 by batmansoft
Спасибо всем, помогла вставка в тяжелый  цикл Application.DoEvents;
#5 by oleg_km
Application.DoEvents;   - ну это собственно и есть требуемая прокачка сообщений
#6 by Torquader
Только это на Visual Basic и других скрипто-подобных языках.
#7 by oleg_km
Ну да, на фокспре я помню есть такая команда. На 1С бы тоже временами не помешала. Но сейчас обычные окна не в моде, поэтому скорее всего не появится
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С