Ich verwende ein STA COM-Objekt aus einem Hintergrundthread, eines der COM-Objekte, das eine Methode blockiert, wenn ich es aus einem neuen Thread im STA-Threading-Modus aufrufe, da der COM-Objektmodus STA ist, und die UI Thread scheint blockiert, kann ich diese UI Blockierung vermeiden?Ein Thread im STA-Threading-Modus blockiert auch den Winform-UI-Thread?
Antwort
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.
- 1. Thread.Join im UI-Thread blockiert auch Kind-Thread
- 2. Blockiert ThreadPool.RegisterWaitForSingleObject den aktuellen Thread oder einen Threadpool-Thread?
- 3. Taskfortsetzung blockiert UI-Thread
- 4. Thread blockiert die UI
- 5. Finalizer-Thread wurde blockiert
- 6. Cordova Plugin Thread blockiert
- 7. Java Thread blockiert
- 8. Android: Bluetooth hören Thread blockiert UI-Thread
- 9. Neuer Thread blockiert immernoch UI-Thread
- 10. iOS AudioSessionSetActive() blockiert Haupt-Thread?
- 11. Gibt es eine Möglichkeit herauszufinden, ob ein Thread blockiert ist?
- 12. Selen async Skript im eigenen Thread blockiert andere Skripte
- 13. Android BLE: onCharacteristicRead() scheint durch den Thread blockiert werden
- 14. Blockiert NSURLConnection den Hauptthread?
- 15. ist mein Code blockiert Knoten Thread
- 16. Unterschied zwischen Thread-Status blockiert und warten
- 17. Warum blockiert ein Java-Thread das OpenGL-Rendering, das in einem anderen Thread ausgeführt wird?
- 18. CountdownTimer im Worker-Thread, der den UI-Thread aktualisiert
- 19. Delphi: TWebBrowser im Hintergrund-Thread
- 20. QDialog hält blockiert Mauseingabe auch nach dem Schließen
- 21. Wie ein Thread im Hintergrund in Python
- 22. Kann ein Standard-Thread für den Thread Pool wiederverwendet werden?
- 23. Zeige Formular im eigenen Thread
- 24. Blockiert Exhanger.exchange?
- 25. std :: launch :: async blockiert wie ein Synchronisierungsprozess
- 26. WPF Text anhängen blockiert den UI Thread stark, aber WinForms nicht?
- 27. Verhindern, dass der tcl-Thread durch die Hauptereignisschleife blockiert wird
- 28. Funktioniert Pthread_cancel, wenn der Thread blockiert Code wie Verbindung akzeptieren?
- 29. Thread-Dump nicht möglich? Irgendwelche Ideen, warum meine App blockiert?
- 30. Haupt-Thread-Ausgang, andere Ausgänge auch?