我正在编写一个由第三方应用程序调用的DLL。 从MTA线程调用DLL,并且必须在同一线程上完成对第三方应用程序的任何调用。 从我的应用程序我需要调用一个进程外的COM服务器,我想使用传递给COM服务器的对象从这个COM服务器回调第三方应用程序。
e.g。
// Called from third party MTA thread
// apiObject must always be called from same thread that called EntryPoint
void EntryPoint(API apiObject)
{
IMyComClass myComObj = createComObject();
myComObj.doStuff(apiObject);
}
Class MyComClass : IMyComClass
{
public void doStuff(API apiObject)
{
apiObject.doSomething();
}
}
现在,如果我可以将线程更改为STA,它可以正常工作,但不幸的是,这是我无法控制的。
有什么简单的方法可以强制从COM服务器返回的调用是在同一个线程上吗?
请注意,调用应用程序不是Windows窗体或WPF应用程序,它是无窗口服务。
我唯一能想到的是创建一个新的工作线程,我从中调用COM服务器并实现自己的事件队列,然后循环等待EntryPoint内的API调用。然后我可以将代理从工作线程调用到事件队列的API调用,确保在EntryPoint中处理队列时从正确的线程调用它们。
对于应该很常见的事情来说,这似乎是一个非常丑陋和复杂的解决方案...... 有一个简单的(r)解决方案吗?