Итак, после этого, я решил явно создать экземпляр COM-объекта в выделенном потоке STA. Эксперименты показали, что COM-объект нуждается в насосе сообщений, который я создал, вызвав Application.Run()
:
private MyComObj _myComObj;
// Called from Main():
Thread myStaThread = new Thread(() =>
{
_myComObj = new MyComObj();
_myComObj.SomethingHappenedEvent += OnSomthingHappened;
Application.Run();
});
myStaThread.SetApartmentState(ApartmentState.STA);
myStaThread.Start();
Как отправить сообщения о потоке сообщений STA из других потоков?
Примечание: Я кратко отредактировал этот вопрос ради краткости. Некоторые части ответа @Servy теперь кажутся несвязанными, но они были для оригинального вопроса.