2010-12-11 2 views
2

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

ответ

5

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

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

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

Смежные вопросы