Récemment, j'ai rencontré cette situation où je voulais afficher un formulaire sur un autre thread (pas le thread principal/UI). J'ai utilisé un thread threadpool. Le formulaire hébergeait un RCW (pour un composant COM). Instancier le formulaire m'a donné une exception que le fil doit être un STA. J'ai essayé de définir l'état de l'appartement comme STA. Mais, cela n'a pas fonctionné non plus. J'ai finalement fini par créer un thread explicitement et cela a fonctionné (j'ai utilisé ShowDialog et n'ai pas besoin de créer une pompe à meesage).Pourquoi ne pouvons-nous pas changer l'état de l'appartement d'un thread ThreadPool et pourquoi n'avons-nous pas besoin d'un messagepump quand ShowDialog est utilisé?
EDIT:
- Je sais que threadpool threads sont MTA. Mais, pourquoi ne peut-il pas être réglé sur STA? Juste curieux à ce sujet.
- Une autre question qui vient à sauté ma tête: Pourquoi ne pas besoin d'une pompe de message
lorsque showDialog() (à
afficher un formulaire) est utilisé
Merci pour la réponse. Pouvez-vous pointer vers un lien, qui dit que ShowDialog() commence sa propre boucle de message. –
http://www.red-gate.com/products/reflector. Conseillé. –
Merci. Application.RunDialog (this) fait l'affaire. –