与标准OleMarshalObject一样,可以在UI线程中执行WCF服务方法吗?

时间:2012-03-28 10:39:48

标签: c# multithreading wcf user-interface ole

我正在为商业应用程序开发一个插件,以显示有关该应用程序中打开的文档的非常简单的信息,等等。应用程序本身不支持COM或NET插件,但只支持DLL中的C ++插件。

我想向COM客户端和在同一台机器上运行的一些信息.NET客户端公开一些信息。

对于COM客户端,我在C#中开发了一个COM接口的实现;然后我在主机应用程序启动时创建一个对象,并在运行对象表中注册该对象。从StandardOleMarshalObject派生此实现似乎足以解决线程问题:显然我的实现方法仅在消息边界的主UI线程上调用,这是一个要求。

对于NET客户端?我需要不同的信息,我不需要依赖特定的COM接口来公开这些信息。我很想开发和托管WCF服务,但我的服务方法在非UI therad上调用,主机应用程序崩溃。如何在WCF上下文中复制StandardOleMarshalObject行为?我需要实现IOperationInvoker?有什么建议要做这个

感谢所有人,请原谅我糟糕的英语。

1 个答案:

答案 0 :(得分:1)

您应该使用SynchronizationContext将处理推进到UI线程。您可以在每个服务操作实现中显式调用SynchronizationContext.Send,或者,如果要实现许多操作,您可以实现发布以同步上下文作为IOperationInvoker中的方面。