Ich schreibe eine Anwendung, die eine COM-Bibliothek verwendet. Ich habe eine Klassenbibliothek, die die Aufrufe an die COM-Bibliothek umschließt und einige weitere Funktionen hinzufügt. Eventuell wird dies als Windows-Dienst ausgeführt. Für jetzt teste ich es mit einem Winforms-Test-Kabelbaum.Dienst löst eine Ausnahme aus, wenn versucht wird, eine COM-Bibliothek aufzurufen
Wenn die Klassenbibliothek vom Test-Kabelbaum erstellt wird, scheint alles in Ordnung zu sein. Die Probleme beginnen, wenn ich versuche, es als Dienst auszuführen. Es ist OK erstellt und sogar der erste Aufruf der COM ist in Ordnung. Das COM-Objekt löst dann ein Ereignis aus, das ich handhabe und reagiere auf das Ergebnis in dem Fall, dass ich eine andere Funktion in der COM-Bibliothek aufruft. Die Funktion wird erfolgreich in dem Fall aufgerufen wird, wenn ich es von der Testumgebung laufen, aber wenn es als Dienst ausgeführt wird eine Ausnahme ausgelöst:
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))."
Ich kann sehen, dass es Threadingprobleme. Im Fall des Testkabelbaums erfolgen alle diese Aufrufe im Hauptthread und im Fall des Windows-Dienstes befinden sich sowohl die Service-OnStart-Überschreibung als auch der COM-Ereignishandler in verschiedenen Threads. Ich habe verschiedene Dinge ohne Erfolg versucht. Irgendwelche Vorschläge?
Können Sie einige Beispielcode? –