我正在開發一個商業應用程序的插件,以公開關於在該應用程序中打開的文檔的非常簡單的信息等等。應用程序本身不支持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
?任何建議要做這個?
感謝所有人,請原諒我的英語不好。
謝謝@ ilya.dorofeev您的建議。我需要使用已有的'SynchronizationContex'實現,或者我需要從'SynchronizationContex'和_implement_派生一個新的'SynchronizationContex'?顯然,我不能使用現有的Windows窗體和WPF'SynchronizationContex',因爲主機應用程序不是Windows窗體或WPF。宿主應用程序的主線程在執行我的插件初始化代碼時,有一個'null'' SynchronizationContex' ... – unlikely 2012-03-28 15:44:07
什麼是宿主應用程序? WinForms和WPF實現它自己的SynchronizationContexts。要爲您的環境實現SynchronizationContext,您應該瞭解如何將工作項目分派給UI線程。 – 2012-04-02 14:15:50
第三方主機應用程序是一個本機C/C++ Windows應用程序:所以沒有WinForm,沒有WPF ... – unlikely 2012-04-02 18:39:51