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