私はCOMライブラリを使用するアプリケーションを作成しています。 COMライブラリに呼び出しをラップし、いくつかの機能を追加するクラスライブラリがあります。最終的にこれはWindowsサービスとして実行されます。今のところ私はWinformsテストハーネスを使ってテストします。COMライブラリを呼び出すときにサービスが例外をスローする
テストハーネスによってクラスライブラリが作成されると、すべて正常に動作しているようです。問題はサービスとして実行しようとすると始まります。それはOKで作成され、COMへの最初の呼び出しでさえOKです。次に、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イベントハンドラの両方が別のスレッド上にあります。私は成功していない別のものを試してきました。助言がありますか?
サンプルコードを提供できますか? –