我正在编写使用COM库的应用程序。我有一个类库,将调用包装到COM库中,并添加了一些功能。最终这将作为Windows服务运行。现在我使用Winforms测试工具测试它。尝试调用COM库时服务抛出异常
当类库由测试工具创建时,一切似乎都工作正常。当我尝试将它作为服务运行时,问题就开始了。它创建成功,即使第一次调用COM也没问题。 COM对象然后引发我处理的事件,并响应事件中的结果,我调用COM库中的另一个函数。
System.InvalidCastException occurred Message="Unable to cast COM object of type '' to interface type ''. This operation failed because the QueryInterface call on the COM component for the interface with IID '{350ADD2A-18CB-4D9C-BE28-48D53F14E6FB}' failed due to the following error: The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))."
我可以看到有线程问题:该功能是当我从测试工具运行它,但作为服务运行时抛出一个异常的情况下成功调用。在测试用例中,所有这些调用都发生在主线程上,而在Windows服务中,Service OnStart覆盖和COM事件处理程序位于不同的线程上。我一直在尝试不同的事情而没有成功。有什么建议么?
您能否提供一些示例代码? – 2009-04-22 16:36:33