J'essaye d'écrire une application WPF qui mettra à jour un ensemble de zones de texte et d'étiquettes lors de l'exécution en utilisant des threads mais le problème est que chaque fois qu'un thread essaie de mettre à jour les zones de texte J'ai l'erreur suivante: "Le thread appelant ne peut pas accéder à cet objet car un thread différent le possède." Est-il possible de mettre à jour le contrôle au moment de l'exécution?Mettre à jour les contrôles WPF à l'exécution
Répondre
Oui, mais vous devez mettre à jour les éléments d'interface utilisateur dans le thread d'interface utilisateur à l'aide de Dispatcher.Invoke.
Exemple en C#: Au lieu de
myTextBox.Text = myText;
utilisation
Dispatcher.Invoke(new Action(() => myTextBox.Text = myText));
VB.NET (avant la version 4) ne prend pas en charge les méthodes anonymes, donc vous devez le contourner avec un anonyme fonction:
Dispatcher.Invoke(Function() UpdateMyTextBox(myText))
...
Function UpdateMyTextBox(ByVal text As String) As Object
myTextBox.Text = text
Return Nothing
End Function
Vous pouvez également démarrer vos threads d'arrière-plan à l'aide de la classe BackgroundWorker prenant en charge les mises à jour dans l'interface utilisateur via les événements ProgressChanged
et RunWorkerCompleted
: Les deux événements sont automatiquement déclenchés dans le thread d'interface utilisateur. Un exemple d'utilisation de BackgroundWorker peut être trouvé ici: SO question 1754827.
Les contrôles dans WPF ont une propriété Dispatcher
sur laquelle vous pouvez appeler Invoke
, en passant un délégué avec le code que vous souhaitez exécuter dans le contexte du thread graphique.
myCheckBox.Dispatcher.Invoke(DispatcherPriority.Normal,
() => myCheckBox.IsChecked = true);
Pour une explication approfondie du modèle de thread WPF, y compris la façon dont les travaux Dispatcher, passez à la minute 17 this video de la randonnée à Mont atelier Avalon MIX09.
- 1. Comment mettre à jour les contrôles de la méthode statique?
- 2. Actualiser/Mettre à jour les contrôles WPF comme les formulaires de gain
- 3. Mettre à jour WPF ListBoxItem sans ListBox.Items.Refresh()?
- 4. Les collections de mises à jour de MVVM WPF pour mettre à jour l'interface utilisateur
- 5. WPF: Mise à jour de la visibilité des contrôles ne mettant pas à jour l'écran
- 6. mettre à jour le tableau puis mettre à jour l'étape
- 7. WPF mettre à jour l'interface utilisateur avec un certain délai
- 8. Accès à tous les contrôles à partir d'une fenêtre WPF
- 9. wpf - afficher, mettre à jour, insérer des modes
- 10. propriété de liaison à travers les contrôles dans WPF
- 11. WPF ListBox ne pas mettre à jour avec le ItemsSource
- 12. WPF: Comment lier et mettre à jour l'affichage avec DataContext
- 13. Comment mettre à jour les modules drupal?
- 14. comment mettre à jour les contacts Android
- 15. Comment mettre à jour les externals Subversion
- 16. monotouch - mettre à jour les données localement
- 17. Mettre à jour les positions movieclip
- 18. WPF Mettre à jour l'implémentation du déclencheur source
- 19. Mettre à jour l'interface utilisateur par le code dans WPF
- 20. Comment mettre à jour une partie d'un style personnalisé WPF
- 21. Comment puis-je mettre à jour un WPF lier immédiatement
- 22. UpdatePanel imbriqué - Mettre à jour ParentPanneau Parent sans mettre à jour les UpdatePanels enfants?
- 23. WPF TreeView lié à ObservableCollection pas mettre à jour les noeuds racine
- 24. Comment identifier les contrôles mis à jour dans UpdatePanel?
- 25. Comment empêcher VS designer de mettre à jour les valeurs localisées des contrôles?
- 26. Vous essayez de comprendre comment mettre à jour dynamiquement les attributs des contrôles ASP?
- 27. Comment mettre à jour les contrôles ActiveX dans un projet C# dans Visual Studio 2005
- 28. Comment mettre à jour mysql?
- 29. Mettre à jour plusieurs lignes
- 30. Comment mettre à jour datagridview