Поток режима потоковой передачи STA также блокирует поток пользовательского интерфейса winform?

Я использую COM-объект STA из фонового потока, один из методов COM-объекта будет заблокирован, когда я вызываю его из нового потока, который находится в режиме потоковой передачи STA, поскольку режим COM-объекта — STA, и поток пользовательского интерфейса кажется тоже блокируется, могу ли я избежать блокировки этого пользовательского интерфейса?


person Benny    schedule 11.12.2010    source источник


Ответы (1)


Это точка STA, COM автоматически маршалирует вызов из вашего рабочего потока в поток STA. Так что методы COM-сервера всегда вызываются потокобезопасным способом. И если метод блокируется, это также заблокирует ваш поток STA. Обычно поток пользовательского интерфейса.

Это означает, что использование этого COM-объекта в потоке на самом деле ничего не дает. Во-вторых, настоящая проблема заключается в COM-сервере, он не должен блокироваться. Убедитесь, что это не тупиковая ситуация.

Возможным обходным путем является создание COM-сервера в другом потоке STA, чтобы, по крайней мере, ваш поток пользовательского интерфейса не блокировался. Проверьте этот ответ для примера кода. Вызовы Thread.SetApartmentState и Application.Run имеют решающее значение для создания гостеприимного дома для сервера.

person Hans Passant    schedule 11.12.2010