Итак, после this, я решил явно создать экземпляр COM-объекта в выделенном потоке STA. Эксперименты показали, что объект COM нужен сообщение насос, который я создал по телефону Application.Run()
:Как отправлять сообщения в поток STA с помощью насоса сообщений?
private MyComObj _myComObj;
// Called from Main():
Thread myStaThread = new Thread(() =>
{
_myComObj = new MyComObj();
_myComObj.SomethingHappenedEvent += OnSomthingHappened;
Application.Run();
});
myStaThread.SetApartmentState(ApartmentState.STA);
myStaThread.Start();
Как отправлять сообщения в сообщении насоса ГЕН поток из других потоков?
Примечание: Я в значительной степени отредактировал этот вопрос для краткости. Некоторые части ответа @ Servy теперь кажутся несвязанными, но они были для оригинального вопроса.
Для неблокирующего инициирования вы не можете использовать ThreadPool.QueueUserWorkerItem? – Didaxis
@Didaxis, нет, потому что тогда насос сообщений не работает в этой нити. – Servy
[Этот ответ] (http://stackoverflow.com/a/21775343/1768303) использует TPL и 'async/await' для реализации и вызова в квартиру STA. – Noseratio