"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 > Comment modifier une ObservableCollection à partir d’un thread non-dispatcher dans WPF ?

Comment modifier une ObservableCollection à partir d’un thread non-dispatcher dans WPF ?

Publié le 2024-11-08
Parcourir:981

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

"Ce type de CollectionView ne prend pas en charge les modifications apportées à sa collection source à partir d'un thread différent du thread Dispatcher"

Description du problème

Une liaison DataGrid à un ObservableCollection rempli de manière asynchrone génère une erreur indiquant que les modifications apportées à SourceCollection ne sont pas autorisées à partir d'un non-Dispatcher thread.

Solution

Le problème vient de l'affinité du thread. L'ObservableCollection est initialement créée sur le thread d'interface utilisateur, ce qui la rend accessible uniquement à partir du thread d'interface utilisateur. Pour le modifier à partir d'un autre thread, le délégué doit être placé sur le répartiteur de l'interface utilisateur.

Code ViewModel mis à jour

public void Load()
{
    matchList = new List();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}

En appelant le délégué sur le répartiteur de l'interface utilisateur, les ajouts à ObservableCollection sont planifiés sur le thread de l'interface utilisateur, résolvant ainsi l'exception.

Liaison et actualisation améliorées

Pour les tâches asynchrones liaison et actualisation du DataGrid, envisagez d'utiliser INotifyPropertyChanged sur vos propriétés ViewModel et d'appeler le Dispatcher pour actualiser l'interface utilisateur éléments.

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