Je dois inclure une application .NET dans une autre application .NET en tant que plugin. L'interface du plugin nécessite que je hérite d'un formulaire de modèle. Le formulaire est ensuite attaché dans un MDI lorsque le plugin est chargé.Cauchemar STA, MTA et OLE
Tout fonctionne à ce jour, mais chaque fois que j'enregistrer des événements glisser-déposer, régler le mode de saisie semi-automatique pour un combobox ou à d'autres situations que je reçois l'exception suivante:
... le fil en cours doit être défini sur en mode STA (Single Thread Apartment) avant que les appels OLE puissent être effectués. Assurez-vous que votre fonction principale a STAThreadAttribute marqué sur elle ...
La principale application est en cours d'exécution dans le MTA et développé par une autre société, donc il n'y a rien que je puisse faire à ce sujet.
J'ai essayé de faire les choses qui provoquent ces exceptions dans les threads STA, mais cela n'a pas résolu le problème non plus.
Est-ce que quelqu'un a été dans la même situation? Est-ce que je peux faire quelque chose pour résoudre le problème?
Nous vous remercions de votre suggestion. J'ai essayé cela mais j'ai eu la même erreur quand j'appelle un élément d'interface utilisateur qui a été créé par un thread de MTA. – xsl
Peut contrôler le démarrage de l'application? Que vous pourriez envelopper dans l'application de conteneur. Créez un thread, initialisez COM et appelez la méthode Main du programme. Selon l'application, cela peut fonctionner ou ne pas fonctionner et bloquer le programme principal, mais peut être votre dernier recours. (Avant de décompiler et de modifier l'application principale et cela peut être illégal.) Vous pouvez également essayer de contacter la société qui l'a développé. – devdimi
Commencez un nouveau thread t, utilisez t.SetApartmentState (System.Threading.ApartmentState.STA), t.Start() - et rien ne peut mal tourner. Cela fonctionne, testé dans mon énorme application au travail. – Harry