我正在为商业应用程序开发一个插件,以显示有关该应用程序中打开的文档的非常简单的信息,等等。应用程序本身不支持COM或NET插件,但只支持DLL中的C ++插件。
我想向COM客户端和在同一台机器上运行的一些信息.NET客户端公开一些信息。
对于COM客户端,我在C#中开发了一个COM接口的实现;然后我在主机应用程序启动时创建一个对象,并在运行对象表中注册该对象。从StandardOleMarshalObject
派生此实现似乎足以解决线程问题:显然我的实现方法仅在消息边界的主UI线程上调用,这是一个要求。
对于NET客户端?我需要不同的信息,我不需要依赖特定的COM接口来公开这些信息。我很想开发和托管WCF服务,但我的服务方法在非UI therad上调用,主机应用程序崩溃。如何在WCF上下文中复制StandardOleMarshalObject
行为?我需要实现IOperationInvoker
?有什么建议要做这个?
感谢所有人,请原谅我糟糕的英语。
答案 0 :(得分:1)
您应该使用SynchronizationContext
将处理推进到UI线程。您可以在每个服务操作实现中显式调用SynchronizationContext.Send
,或者,如果要实现许多操作,您可以实现发布以同步上下文作为IOperationInvoker
中的方面。