Je suis en train de construire une application WPF. Je suis en train de faire quelques asynchrone de la communication avec le serveur, et j'utilise de l'agrégation d'événements avec Prisme sur le client. Ces deux choses en résulte de nouveaux fils est engendré, qui ne sont pas le thread d'INTERFACE utilisateur. Si je tente de faire "WPF opérations" sur ces de rappel et de gestionnaire d'événement de threads que le monde va s'écrouler, qu'elle a commencé à le faire.
D'abord, j'ai rencontré des problèmes en essayant de créer certains objets WPF dans le rappel de serveur. On m'a dit que le fil nécessaire pour exécuter dans le mode STA. Maintenant, je vais essayer de mettre à jour certaines données de l'INTERFACE dans un Prisme de gestionnaire d'événements, et je me suis dit que:
L'appelant ne peut pas accéder à ce fil, car un autre thread en est le propriétaire.
De la sorte; ce qui est la clé pour faire les choses dans WPF? J'ai lu sur le Répartiteur WPF dans ce MSDN post. Je commence à y arriver, mais je suis pas d'assistant.
- Est la clé de toujours utiliser un Répartiteur.Appeler quand j'ai besoin de faire quelque chose dont je ne suis pas sûr qu'elle sera appelée sur le thread d'INTERFACE utilisateur?
- Importe-t-il si elle a effectivement été appelé sur le thread de l'INTERFACE utilisateur, et je ne Répartiteur.Appeler de toute façon?
- Répartiteur.Appeler = de façon synchrone. Dispathcher.BeginInvoke = async?
- Va Dispatcher.Invoquer demande le thread de l'INTERFACE utilisateur, puis s'arrêter pour l'attendre? C'est une mauvaise pratique et un risque de moins de programmes sensibles?
- Comment puis-je obtenir le répartiteur de toute façon? Va Dispatcher.CurrentDispatcher me donnent toujours le répartiteur représentant le thread d'INTERFACE utilisateur?
- Sera-t-il exister plus d'un Répartiteur, ou est de "Dispatcher" essentiellement la même que le thread d'INTERFACE utilisateur pour l'application?
- Et quel est le problème avec le composant BackgroundWorker? Quand dois-je l'utiliser? Je suppose que c'est toujours asynchrone?
- Va sur tout ce qui fonctionne sur le thread d'INTERFACE utilisateur (par Invoquée) être exécuté en STA-appartement de mode? I. e. si j'ai quelque chose qui doit être exécuté dans le mode STA - va Dispatcher.Invoquer être suffisant?
Quelqu'un veux clearify choses pour moi? Toutes les recommandations, etc? Merci!