Ich muss eine .NET-Anwendung in eine andere .NET-Anwendung als ein Plugin einschließen. Die Plugin-Schnittstelle erfordert, dass ich von einem Template-Formular erbte. Das Formular wird dann in einem MDI angehängt, wenn das Plugin geladen wird.STA, MTA und OLE Alptraum
Alles funktioniert so weit, aber wenn ich für Drag registrieren und Ereignisse fallen, stellen Sie den Modus zur automatischen Vervollständigung für eine Combobox oder an verschiedenen anderen Situationen, die ich die folgende Ausnahme erhalten:
... den aktuellen Thread muss auf single thread apartment (STA) mode gesetzt werden, bevor OLE-Aufrufe vorgenommen werden können. Stellen Sie sicher, dass Ihre Hauptfunktion hat STAThreadAttribute auf sie markiert ...
Die Hauptanwendung ist von einem anderen Unternehmen in MTA und entwickelt laufen, so gibt es nichts, was ich dagegen tun kann.
Ich habe versucht, die Dinge zu tun, die diese Ausnahmen in STA-Threads verursachen, aber das hat das Problem auch nicht gelöst.
Hat sich jemand in der gleichen Situation befunden? Kann ich etwas tun, um das Problem zu lösen?
Vielen Dank für Ihren Vorschlag. Ich habe das versucht, aber ich habe denselben Fehler, wenn ich ein UI-Element aufruft, das von einem MTA-Thread erstellt wurde. – xsl
Kann steuern, wie die Anwendung gestartet wird? Dann könnten Sie es in Container-App umbrechen. Erstellen Sie einen Thread, initialisieren Sie COM und rufen Sie dann die Main-Methode des Programms auf. Abhängig von der Anwendung kann dies funktionieren oder nicht funktionieren und das Hauptprogramm zum Absturz bringen, aber möglicherweise Ihr letzter Ausweg. (Vor dem Dekompilieren und Ändern der Hauptanwendung und das könnte illegal sein.) Sie könnten auch versuchen, das Unternehmen, das es entwickelt hat, zu kontaktieren. – devdimi
Starten Sie einen neuen Thread t, verwenden Sie t.SetApartmentState (System.Threading.ApartmentState.STA), t.Start() - und nichts kann schief gehen. Es funktioniert einfach, getestet in meiner riesigen App bei der Arbeit. – Harry