Bonjour/soir,
J'essaie dernièrement d’utiliser l’élément treeview de WPF et je rencontre un problème avec son utilisation.
Je m'entraîne en récupérant l'arborescence de mon ordinateur depuis un dossier, et avec de la récursivité je récupère les sous-dossiers et les fichiers présents.
Ça sa marche très bien, l'inconvénient est que ça prend quelques secondes à tout charger et donc j'ai mis mon code dans un thread.
Le problème survient quand je veux repasser toute l'arborescence créée avec des TreeViewItem à mon treeView. A ce moment là j'obtient un InvalidOperationException "Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire."
Ce problème je l'ai déjà eu dans d'autres programmes et je l'ai résolu en utilisant un Dispatcher.BeginInvoke
Mon code appelé depuis le thread pour mettre à jour le treeview se présente comme suit.
Le node reçu comporte tous les nodes et sous nodes de mon arborescence et j'essaie ensuite simplement de l'ajouter à mon treeview. Habituellement le bout de code au-dessus me permet de régler les problèmes de communications d'un thread à un autre. Mais là même avec, je n'arrive pas à éviter une exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public void MiseAJourNode(TreeViewItem node) { treeViewMain.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new Action( delegate() { treeViewMain.Items.Add(node); })); }
Une expérience à partager à propos des treeview et des threads?
Je vous remercie d'avance et vous souhaite un bon week-end.
Partager