"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi est-ce que j'obtiens « Ce type de CollectionView ne prend pas en charge les modifications apportées à sa SourceCollection à partir d'un thread différent du thread Dispatcher » ?

Pourquoi est-ce que j'obtiens « Ce type de CollectionView ne prend pas en charge les modifications apportées à sa SourceCollection à partir d'un thread différent du thread Dispatcher » ?

Publié le 2024-11-04
Parcourir:666

Why Am I Getting \

Gestion des erreurs : "Ce type de CollectionView ne prend pas en charge les modifications apportées à sa SourceCollection à partir d'un thread différent du thread Dispatcher"

Le message d'erreur donné, "Ce type de CollectionView ne prend pas en charge les modifications apportées à sa SourceCollection à partir d'un thread différent du thread Dispatcher", indique une tentative de modification d'une ObservableCollection à partir d'un thread non-UI. thread.

Comme expliqué dans le code fourni, la méthode Load() de ViewModel remplit le _matchObsCollection ObservableCollection à partir d'une liste d'objets GetMatchDetailsDC. Cependant, cette mise à jour est effectuée en dehors du thread de l'interface utilisateur.

Thread Affinity et Dispatcher

Dans WPF, les éléments de l'interface utilisateur, tels que DataGrid, sont créés sur le thread de l'interface utilisateur et conservent un affinité de fil. Toute modification de ces éléments doit être effectuée à partir du thread de l'interface utilisateur pour garantir la sécurité du thread.

Résolution de l'erreur

Pour résoudre ce problème, vous pouvez utiliser App.Current.Dispatcher.Invoke(( Méthode Action)delegate { ... }) pour appeler la mise à jour de la collection sur le thread de l'interface utilisateur :

matchList = proxy.GetMatch().ToList();

foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
    App.Current.Dispatcher.Invoke((Action)delegate  // 

Chargement de données asynchrones dans WPF

Bien que l'utilisation de méthodes asynchrones pour le chargement de données soit courante, il est important de prendre en compte la sécurité des threads lors de la manipulation d'éléments d'interface utilisateur à partir de threads non-UI. Assurez-vous toujours que toutes les mises à jour des éléments de l'interface utilisateur, telles que la modification d'un ObservableCollection, sont effectuées sur le thread de l'interface utilisateur pour éviter les erreurs liées au thread.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3