2010-12-11 13 views

Antwort

5

Das ist der Punkt von STA, COM wird den Aufruf von Ihrem Arbeitsthread automatisch zu dem STA-Thread marshalieren. Damit werden die COM-Server-Methoden immer threadsicher aufgerufen. Und wenn die Methode blockiert, blockiert das auch Ihren STA-Thread. Normalerweise der UI-Thread.

Dies bedeutet zum einen, dass die Verwendung dieses COM-Objekts in einem Thread tatsächlich nichts bewirkt. Zum anderen ist das eigentliche Problem im COM-Server, sollte es nicht blockieren. Stellen Sie sicher, dass dies keine Deadlock-Situation ist.

Eine mögliche Problemumgehung besteht darin, den COM-Server in einem anderen STA-Thread zu erstellen, damit zumindest der UI-Thread nicht blockiert wird. Überprüfen Sie this answer für Beispielcode. Sowohl die Thread.SetApartmentState- als auch die Application.Run-Aufrufe sind entscheidend, um ein gastfreundliches Zuhause für den Server zu schaffen.

Verwandte Themen