Поток режима потоков STA также блокирует поток пользовательского интерфейса winform? - PullRequest
2 голосов
/ 11 декабря 2010

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

1 Ответ

5 голосов
/ 11 декабря 2010

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

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

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

...