2010-12-11 5 views
2

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

5

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.

Questions connexes