Comment le thread Dispatcher fonctionne-t-il dans wpf un contrôle d'interface utilisateur?Comment fonctionne le thread Dispatcher dans wpf un contrôle d'interface utilisateur
Répondre
Modifier.
Si vous avez une tâche en cours d'exécution, déléguez-la à un thread d'arrière-plan à l'aide d'un BackGroundWorker, puis vous n'aurez plus besoin d'utiliser le répartiteur pour renvoyer les messages à l'interface utilisateur. This is a very good article.
C'est une question très large. Je vous suggère de commencer ici avec WPF Architecture.
La plupart des objets en WPF dérivent de DispatcherObject, qui fournit les constructions de base pour traiter et le filetage concurrency. WPF est basé sur un système de messagerie mis en œuvre par le répartiteur. Ce fonctionne un peu comme la pompe à messages familière Win32 ; en fait, le répartiteur WPF utilise des messages User32 pour en effectuant des appels croisés.
Il y a vraiment deux concepts de base pour comprendre lors de la discussion dans WPF concurrency - le répartiteur et d'affinité de fil .
Au cours de la phase de conception de WPF, l'objectif était de passer à un seul fil d'exécution , mais un non-fil modèle « affinitized ». Thread affinity se produit lorsqu'un composant utilise l'identité du thread en cours d'exécution à stocker un certain type d'état. La forme la plus commune de ceci est d'utiliser le magasin local de thread (TLS) pour stocker l'état . L'affinité de thread requiert que chaque thread logique d'exécution soit appartenant à un seul thread physique dans le système d'exploitation, qui peut devenir mémoire intensive. À la fin, le modèle de threads de WPF a été maintenu en synchronisation avec le modèle de threads User32 existant de exécution thread unique avec filetage affinité. La principale raison de ce était l'interopérabilité - des systèmes tels que OLE 2.0, le presse-papiers et Internet Explorer requièrent tous une exécution d'affinité (STA) à un seul thread .
Étant donné que vous avez des objets avec filetage STA , vous avez besoin d'un moyen de communication entre fils et validate que vous êtes sur le fil correct. Ici réside le rôle du répartiteur . Le répartiteur est un système de répartition des messages de base , avec files d'attente à priorité multiple. Les exemples de messages incluent les notifications d'entrée brute (souris déplacée), les fonctions de structure (disposition) ou les commandes utilisateur (exécutez cette méthode). En dépendant de DispatcherObject, vous créez un objet CLR qui a un comportement STA et un pointeur vers un répartiteur lors de la création.
hmm .. mon doute est quand un processus de longue durée se passe derrière l'interface utilisateur, cette fois WPF UI ne répondra pas ou à l'aide du thread répartiteur il peut être résolu? –
s'il vous plaît commentaire pour voté vers le bas .. –
S'il vous plaît être un peu plus précis dans votre question. –