来自VSTO Excel Addin的进程COM-DLL的asynchronous调用?

我正在开发适用于Microsoft Excel 2007/2010的应用程序级VSTO 4 Addin。结果是使用.Net 4 Client Profile的基于Windows窗体的DLL。

现在我必须使用一个传统的COM-DLL。 设置引用并通过.Net通过COM-Interop访问COM方法是没有问题的。

但是我需要调用的(同步)方法可能需要一分钟或更长时间才能恢复。

我知道你的答案:使用工作者线程…

已经使用任务并行库将长效操作放在工作任务中,并保持GUI(Excel)响应。


但是:进程中的COM调用(在工人任务/线程)似乎仍然阻止我的GUI线程。

  • 为什么? 是因为Excel总是作为STA(单线程公寓)运行?
  • 我如何保持Excel GUI的响应?
  • 有没有办法让它真的asynchronous?

感谢任何答案,

约尔格

最后,我find了这个话题的答案:

我已经了解了很多关于COM线程模型的知识,然后和作为InProc-Server调用的COM-DLL的开发人员进行了交stream。

我们一起改变了COM-DLL的线程模型 :

  • OLD(封锁):单线公寓(STA),(ThreadingModel =公寓)
  • 新(工作):multithreading公寓(MTA),(ThreadingModel =免费)

由于我们在COM-DLL中有自己的同步机制,所以没有因通过标准的Windows消息队列进行同步而造成的问题。

问题是,即使UI线程闲置,即使它做了DoEvents ,重要的Windows消息( WM_Paint等)也没有被传递。

现在他们是。 UI每次都在响应,并且对工作线程的COM-DLL调用仍然在工作线程中完成(如上所述,它是由Task Parallel Library使用的ThreadPool线程)。