Я использую COM-объект STA из фонового потока, один из методов COM-объекта будет заблокирован, когда я вызываю его из нового потока, который находится в режиме потоковой передачи STA, поскольку режим COM-объекта — STA, и поток пользовательского интерфейса кажется тоже блокируется, могу ли я избежать блокировки этого пользовательского интерфейса?
Поток режима потоковой передачи STA также блокирует поток пользовательского интерфейса winform?
Ответы (1)
Это точка STA, COM автоматически маршалирует вызов из вашего рабочего потока в поток STA. Так что методы COM-сервера всегда вызываются потокобезопасным способом. И если метод блокируется, это также заблокирует ваш поток STA. Обычно поток пользовательского интерфейса.
Это означает, что использование этого COM-объекта в потоке на самом деле ничего не дает. Во-вторых, настоящая проблема заключается в COM-сервере, он не должен блокироваться. Убедитесь, что это не тупиковая ситуация.
Возможным обходным путем является создание COM-сервера в другом потоке STA, чтобы, по крайней мере, ваш поток пользовательского интерфейса не блокировался. Проверьте этот ответ для примера кода. Вызовы Thread.SetApartmentState и Application.Run имеют решающее значение для создания гостеприимного дома для сервера.