Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: PuSTaM от 04-08-2024, 20:56:08

Название: CLR не удалось перейти из COM-контекста
Отправлено: PuSTaM от 04-08-2024, 20:56:08
Доброго всем времени суток.
Заранее прошу прощения, если эта тема где-то есть (я честно искал, но не нашел) или тема вопроса на столько очевидна, что в приличном обществе о таком не спрашивают (я недавно в разработке, некоторые вопросы ещё ставят меня в тупик).

Есть программа, которая обрабатывает большое количество примитивов, при запуске в режиме отладки, через минуту после старта получаю ошибку с таким текстом:
Цитировать
"Помощник по отладке управляемого кода "ContextSwitchDeadlock" : "CLR не удалось перейти из COM-контекста 0x75920408 в COM-контекст 0x759201b8 за 60 секунд. Наиболее вероятно, что поток, владеющий контекстом/апартаментом назначения, находится в режиме ожидания или выполнения очень длительной операции без прокачки сообщений Windows. Обычно эта ситуация отрицательно влияет на производительность и даже может привести к зависанию приложения или чрезмерному расходованию памяти. Чтобы избежать этой проблемы, все потоки однопоточного апартамента (STA) должны использовать примитивы ожидания для прокачки (например, CoWaitForMultipleHandles) и периодически прокачивать сообщения во время длительных операций."
На просторах интернета прочитал что это из-за того что выполняется большой объем вычислений, что не дает доступа к интерфейсу программы (и это действительно так), и если в коде действительно предусмотрен большой объем вычислений, то нужно просто выключить это оповещение.


После выключения этого оповещения программа работает как от неё ожидается, но я понятия не имею к чему может привести игнорирование этого оповещения. Может стоит количество обрабатываемых объектов дозировать, что бы они обрабатывались порционно или это и правда можно игнорировать?
Прошу совета у более опытных разработчиков, что делать в таких ситуациях
Название: Re: CLR не удалось перейти из COM-контекста
Отправлено: trir от 06-08-2024, 07:15:09
Не используй COM, используй NET API
Название: Re: CLR не удалось перейти из COM-контекста
Отправлено: PuSTaM от 06-08-2024, 09:57:43
Я и использую .NET API. Иначе зачем мне создавать тему в этой ветке?
Название: Re: CLR не удалось перейти из COM-контекста
Отправлено: trir от 06-08-2024, 13:55:28
https://learn.microsoft.com/ru-ru/dotnet/api/system.threading.cancellationtoken?view=net-8.0
Название: Re: CLR не удалось перейти из COM-контекста
Отправлено: Алексей Кулик от 07-08-2024, 19:23:49
Off-Topic: показать
На всякий случай - AutoCAD не очень хорошо дружит с многопоточностью, насколько мне известно.