J'écris une application qui utilise une bibliothèque COM. J'ai une bibliothèque de classes qui encapsule les appels à la bibliothèque COM et ajoute plus de fonctionnalités. Finalement, cela fonctionnera comme un service Windows. Pour l'instant je l'ai testé en utilisant un harnais de test Winforms.Le service lève une exception lors de la tentative d'appel d'une bibliothèque COM
Lorsque la bibliothèque de classes est créée par le faisceau de test, tout semble fonctionner correctement. Les problèmes commencent quand j'essaie de l'exécuter en tant que service. Il est créé OK et même le premier appel à COM est OK. L'objet COM déclenche alors un événement que je gère et en réponse au résultat dans l'événement j'appelle une autre fonction dans la bibliothèque COM. La fonction est invoquée avec succès dans le cas où je le lance du faisceau de test, mais lors de l'exécution en tant que service une exception est levée:
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))."
Je vois qu'il ya des problèmes de filetage. Dans le cas du faisceau de test, tous ces appels se produisent sur le thread principal et, dans le cas du service Windows, le remplacement Service OnStart et le gestionnaire d'événements COM se trouvent sur des threads différents. J'ai essayé différentes choses sans succès. Aucune suggestion?
Pouvez-vous fournir un exemple de code? –