0

我正在编写一个由第三方应用程序调用的 DLL。DLL 从 MTA 线程调用,任何对第三方应用程序的调用都必须在同一线程上完成。从我的应用程序中,我需要调用进程外的 COM 服务器,并且我想使用传递给 COM 服务器的对象从该 COM 服务器回调第三方应用程序。

例如

// 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)解决方案?

4

0 回答 0