Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Зависание однопоточного приложения


Автор: Landing 27.2.2010, 07:18
При вызове COM-объекта программа висит, далее в студии падает исключение с таким сообщением:

Цитата

CLR не удалось перейти из COM-контекста 0x20a1b8 в COM-контекст 0x20a328 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций.


Куда копать, чтобы это вылечить?

Автор: explorer 27.2.2010, 10:49
Цитата

Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций.

Автор: Landing 1.3.2010, 08:37
Цитата(explorer @ 27.2.2010,  10:49)
Цитата

Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций.

Я конечно это тоже прочитал. smile Но эти общие фразы очень размыто отвечают на вопрос:"что делать?".

Для тех, у кого возникала подобная ситуация, скажу, что надо использовать асинхронные методы. 
Копать в сторону BeginInvoke, RequestInvoke. Я пока остановился на варианте использования класса BackgroundWorker (System.ComponentModel.BackgroundWorker), предназначенный для создания и управления работой потоков.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)