Как зависят вызовы COM с Neutral Appartment от установленных аттрибутов STA/MTA?
От: LWhisper  
Дата: 18.10.12 12:05
Оценка:
Всем привет!

Есть COM-объект. При регистрации в реестре, ThreadModel указана, как Neutral.

Создаётся он в главном потоке приложения. Вызывается из других потоков.

Проблема: если у главного потока (метода main) стоит аттрибут STAThread, сообщения до этого объекта не доходят до тех пор, пока не будет вызван thread.Join();
Если установить MTAThread, сообщения замечательно отправляются.

Вопрос: почему?

Здесь: http://rsdn.ru/forum/dotnet/3605409
Автор: vmpire
Дата: 17.11.09

Нашёл доходчивые объяснения по аппартментам. К сожалению, Neutral не рассматривался. Зато по нему в сети куча очень мутной информации. Вроде бы, он вообще не должен зависеть от аппартмента вызывающего потока... а как насчёт аппартмента создающего?

Вот здесь есть табличка:
http://msdn.microsoft.com/en-us/library/ms681753%28VS.85%29.aspx

И Neutral'ы разделены на два: STA и MTA.

Для STA: Created in host single-threaded apartment for this thread.
Для MTA: Created in host single-threaded apartment.

То есть, чем-то всё-таки различаются?

Вот здесь:
www.codeguru.com/cpp/com-tech/activex/apts/article.php/c5529/Understanding-COM-Apartments-Part-I.htm
Весьма подробно разжевано, но из него выходит, что разницы нет, а тесты показывают, что разница есть. =\

Но опять же — там про вызовы, а момент создания как-то обошли.

Заранее спасибо за любую помощь!
com threads threadmodel appartments
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.