2010-11-01 31 views
0

Est-il possible de mettre à jour une grande ObservableCollection (c'est-à-dire d'ajouter des éléments) sans la suspendre aux États-Unis? Je me demande si c'est une boucle relativement grande (500 itérations) où chaque itération ajoute un élément à la collection. OU si c'est le fait que la collection est en cours de rafraîchissement et notifier l'interface utilisateur d'une modification.Mise à jour d'une ObservableCollection sans suspendre l'interface utilisateur

OU ... les deux!

Je suis venu sur ce fil, mais ce pourrait être une question tout à fait différente en ce qui concerne le Dispatcher (pourquoi serait à l'aide du répartiteur d'aide?): Using BackgroundWorker to update the UI without freezes...?

Répondre

1

Cocher cette previous SO answer. ObservableCollection ne vous permet pas de désactiver et de réactiver les événements déclenchés pour les modifications, mais il semble que vous pouvez le faire avec BindingList.

+0

Cool. J'espère que SL a des listes contraignantes. Je vais certainement aller dans cette voie si je peux. Mais, pour le moment, j'aimerais savoir si la mise à jour d'une collection sur un événement asynchrone terminé via Dispatcher aiderait à alléger l'interface utilisateur. quelqu'un peut-il confirmer ou infirmer cela? – AlvinfromDiaspar

+0

L'utilisation du répartiteur n'aidera pas. Tout ce qu'il fait est l'accès de marshal cross-thread pour vous. (Par exemple, si vous souhaitez mettre à jour une interface utilisateur à partir d'un thread différent, vous utilisez Dispatcher pour invoquer les commandes de l'interface utilisateur.) Votre collection va toujours déclencher des événements chaque fois que la collection est modifiée. Comme ils s'abonnent aux événements à l'aide de délégués multidiffusion, leurs notifications sont envoyées sur de nouveaux threads et ne sont donc pas bloqués ou bloqués par vos mises à jour de collection observables. Pouvez-vous faire vos mises à jour à un IEnumerable puis faire ObservableCollection? –