Всем привет!
Есть 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
Весьма подробно разжевано, но из него выходит, что разницы нет, а тесты показывают, что разница есть. =\
Но опять же — там про вызовы, а момент создания как-то обошли.
Заранее спасибо за любую помощь!