J'utilise un objet STA COM à partir d'un thread de fond, un des objets COM qu'une méthode bloquera, quand je l'appelle depuis un nouveau thread qui est en mode STA threading puisque le mode de l'objet COM est STA, et l'interface utilisateur le fil semble bloqué aussi, puis-je éviter ce blocage de l'interface utilisateur?Un thread de mode d'exécution STA bloque également le thread UI Winform?
Répondre
C'est le point de STA, COM va automatiquement marshal l'appel de votre thread de travail au thread STA. Ainsi, les méthodes du serveur COM sont toujours appelées de manière thread-safe. Et si la méthode bloque, cela bloquera aussi votre thread STA. Habituellement, le fil de l'interface utilisateur.
Cela signifie pour un que l'utilisation de cet objet COM dans un thread n'effectue réellement rien. Pour un autre que le vrai problème est dans le serveur COM, il ne devrait pas être bloqué. Assurez-vous que ce n'est pas une situation de blocage.
Une solution de contournement possible consiste à créer le serveur COM sur un autre thread STA afin qu'au moins votre thread d'interface utilisateur ne soit pas bloqué. Vérifiez this answer pour l'exemple de code. Les deux Thread.SetApartmentState et les appels Application.Run sont cruciaux pour créer une maison accueillante pour le serveur.
- 1. thread STA Abandonner Exception
- 2. Le nouveau thread bloque toujours l'UI-Thread
- 3. Gardez UI Thread free
- 4. Dormir un thread bloque stdin
- 5. Thread.join bloque le thread principal
- 6. BlockingCollection + thread UI
- 7. Un moyen d'exécuter brièvement Thread UI lorsque le thread non-UI est arrêté dans le débogueur?
- 8. L'utilisation du thread d'interface utilisateur WPF devrait toujours assurer le mode STA apartment, n'est-ce pas?
- 9. InfoPath FormControl sur le thread de travail STA
- 10. WPF UI Thread Status
- 11. [Threading CLR] Lorsqu'un thread de thread thread bloque, le pool de threads crée des threads supplémentaires
- 12. Exception de thread STA hors de bleu dans l'application WPF
- 13. Comment détecter le thread UI sur Android?
- 14. Un thread d'interface utilisateur bloque un thread d'arrière-plan appelant un objet COM
- 15. WPF: Passage d'objets entre thread Thread et Background UI
- 16. Problème de thread/COM/UI possible
- 17. Détecter si le code s'exécute sur le thread d'arrière-plan ou le thread UI (Dispatcher)
- 18. Utilisation d'exceptions dans un boost :: thread thread
- 19. Dispatcher.Invoke se bloque lorsque le thread principal appelé Thread.Join
- 20. opération cross-thread même lors de l'exécution sur le thread UI
- 21. boost: thread se bloque compilateur C++ microsoft
- 22. WPF Obtention d'un thread d'interface utilisateur ou affichage d'une fenêtre à partir d'un thread NON-UI
- 23. quel thread un nouveau thread voit comme 'parent'
- 24. Supprimer un UIViewController exécutant un thread bloque mon application
- 25. Accéder au thread UI d'un formulaire?
- 26. Android: asyncTask peut-il retourner dans un autre thread que thread UI?
- 27. Comment obtenir une poignée de fenêtre pour un appartement à un seul thread (STA) COM?
- 28. L'appel Win32 CreateWindow() se bloque dans le thread enfant?
- 29. Est-ce que [UIWebView loadRequest] bloque le thread?
- 30. Évitez que le thread principal ne se bloque lorsque UIWebView tente de verrouiller de manière bloquante le thread Web