|
Обнаружено событие 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С бы тоже временами не помешала. Но сейчас обычные окна не в моде, поэтому скорее всего не появится
|
|