【发布时间】:2014-03-07 23:49:32
【问题描述】:
因此,在this 之后,我决定在专用 STA 线程上显式实例化 COM 对象。实验表明,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 的答案的某些部分现在似乎无关紧要,但它们是针对原始问题的。
【问题讨论】:
-
对于非阻塞启动不能使用 ThreadPool.QueueUserWorkerItem 吗?
-
@Didaxis,不,因为那时消息泵没有在该线程中运行。
-
This answer 使用 TPL 和
async/await实现并调用 STA 公寓。
标签: c# com interop message-queue sta