2012-03-28 41 views
0

我正在開發一個商業應用程序的插件,以公開關於在該應用程序中打開的文檔的非常簡單的信息等等。應用程序本身不支持COM或NET插件,但只有C++插件在DLL中。與StandardOleMarshalObject一樣,WCF服務方法可以在UI線程中執行嗎?

我想公開一些信息給COM客戶端和一些信息在同一臺機器上運行的NET客戶端。

對於我在C#中開發的COM客戶端實現的COM客戶端;那麼我在主機應用程序啓動時創建一個對象,並在Running Object Table中註冊該對象。從StandardOleMarshalObject派生這個實現似乎足以解決線程問題:顯然,我的實現方法僅在消息邊界的主UI線程上調用,這是一個要求。

而對於.NET客戶端?我需要不同的信息,我不需要依靠特定的COM接口來公開這些信息。我很想開發和託管一個WCF服務,但是我的服務方法在非UI Therad和主機應用程序崩潰時被調用。我如何複製WCF上下文中的StandardOleMarshalObject行爲?我需要實施一個IOperationInvoker?任何建議要做這個

感謝所有人,請原諒我的英語不好。

回答

1

您應該使用SynchronizationContext將處理推進到UI線程。您可以在每個服務操作實現中顯式調用SynchronizationContext.Send,或者如果要執行許多操作,則可以在IOperationInvoker中實現發佈以同步上下文作爲方面。

+0

謝謝@ ilya.dorofeev您的建議。我需要使用已有的'SynchronizationContex'實現,或者我需要從'SynchronizationContex'和_implement_派生一個新的'SynchronizationContex'?顯然,我不能使用現有的Windows窗體和WPF'SynchronizationContex',因爲主機應用程序不是Windows窗體或WPF。宿主應用程序的主線程在執行我的插件初始化代碼時,有一個'null'' SynchronizationContex' ... – unlikely 2012-03-28 15:44:07

+0

什麼是宿主應用程序? WinForms和WPF實現它自己的SynchronizationContexts。要爲您的環境實現SynchronizationContext,您應該瞭解如何將工作項目分派給UI線程。 – 2012-04-02 14:15:50

+0

第三方主機應用程序是一個本機C/C++ Windows應用程序:所以沒有WinForm,沒有WPF ... – unlikely 2012-04-02 18:39:51

相關問題