Ich versuche gerade ein Problem zu lösen und zwar gibt es zwei Komponenten in der Software an der ich arbeiten(muss) die beide mit CoInitializeEx unterschiedliche ThreadModels setzen - ergibt komische Effekte und ist definitiv nicht richtig Was ist jetzt aber ein einfacher/richtiger Fix - die beiden Komponenten fragen nur ein paar Daten ab und liefern ein paar Strings zurueck - also relativ klein kann ich die beiden Komponenten jeweils in einen eigenen Thread bannen und dort die CoInitializes Aufrufen und das ganze da durch entkoppeln oder was wäre die richtige Lösung Danke für eure Hilfe/Tips
cppbert schrieb: > Ich versuche gerade ein Problem zu lösen und zwar gibt es zwei > Komponenten in der Software an der ich arbeiten(muss) die beide mit > CoInitializeEx unterschiedliche ThreadModels setzen - ergibt komische > Effekte und ist definitiv nicht richtig > > Was ist jetzt aber ein einfacher/richtiger Fix - die beiden Komponenten > fragen nur ein paar Daten ab und liefern ein paar Strings zurueck - also > relativ klein > > kann ich die beiden Komponenten jeweils in einen eigenen Thread bannen > und dort die CoInitializes Aufrufen und das ganze da durch entkoppeln > oder was wäre die richtige Lösung > > Danke für eure Hilfe/Tips von einer der Komponenten haben ich den Source, von der anderen nur eine Lib
Eine Komponente wird in einem Apartment instanziiert, zu dieser Zeit muss es bereits initialisiert sein. Instanziierst Du die Komponente in einem "falschen" Apartment, greift die COM Runtime auch ohne Dein Zutun ein. Wichtig ist nur, dass Du im STA eine Nachrichten-Pumpe laufen hast, dann funktioniert das von selbst. Ansonsten gilt: Ein Thread wohnt zu einer Zeit genau in einem Apartment. Benötigst Du mehrere Apartments gleichzeitig, musst Du mehrere Threads erstellen. Und immer schön daran denken, niemals Schnittstellenzeiger direkt zwischen Threads zu tauschen!
René K. schrieb: > niemals Schnittstellenzeiger > direkt zwischen Threads zu tauschen! Danke für den Hinweis - gerade so ein Stelle im Code entdeckt Ich werde die beiden Dinger komplett in eigene Threads auslagern und nur die Daten zurueck liefern - dann ist erst mal clean
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.