Question

Y a-t-il un moyen de faire

ICollectionView.Refresh() 

ou

CollectionViewSource.GetDefaultView(args.NewValue).Refresh();

dans un fil de discussion séparé ?

Je sais que je peux utiliser dispatcher, mais cette collection est liée à un ListView et renvoie des exceptions multithreads.

La raison pour laquelle j’ai besoin d’un deuxième thread est que j’ai le contrôle qui affiche une liste d’IMyItems. Lors du filtrage de cette Collection (par saisie de modification de texte utilisateur), je souhaite pouvoir afficher mon animation modifiée par CollectionView.

Était-ce utile?

La solution

Vous ne pouvez pas!

Toutes les opérations de l'interface utilisateur doivent se dérouler sur le thread d'interface utilisateur. Presque tous les appels de DispatcherObject (et tous les contrôles de cette hiérarchie) de WPF appellent régulièrement CheckAccess ().

Vous pouvez envisager d’utiliser une ObservableCollection pour garder vos données à jour, si vous effectuez un traitement dans un fil d’arrière-plan ou dans BackgroundWorker.

Autres conseils

Pourquoi ne pas utiliser Dispatcher pour travailler avec une priorité d'arrière-plan?

Dispatcher.Invoke(DispatcherPriority.Background,
    () => { CollectionViewSource.GetDefaultView(args.NewValue).Refresh(); }
);

J'ai piraté une méthode rapide pour invoquer des actions sur des objets acheminables wpf (tous les contrôles wpf héritent de DispatcherObject )

public static void InvokeWpf(DispatcherObject dispatchable, Action action, bool async)
{
    // DispatcherOperationCallback is optimized for wpf invoke calls
    DispatcherOperationCallback toDo = delegate{ action(); return null; };

    if (!dispatchable.CheckAccess())
    {
        if (async) 
            dispatchable.Dispatcher.BeginInvoke(toDo, null);
        else
            dispatchable.Dispatcher.Invoke(toDo, null);
    }
    else
    {
        toDo(null);
    }
}

Utilisation:

InvokeWpf(listView, 
       () => CollectionViewSource.GetDefaultView(listView).Refresh(), 
       false);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top