Comment ajouter des milliers d'éléments à une collection liée sans verrouiller l'interface graphique

J'ai une configuration où potentiellement des milliers d'articles (pensez à 3000-5000) seront ajoutés à un ObservableCollection qui est lié à certains interface visuelle. Actuellement, le processus d'ajout d'eux est assez lent (env. 4 secondes/1000 articles), et bien sûr, l'interface graphique ne répond pas pendant ce temps. Ce qui est une bonne méthode pour gérer le déplacement que de nombreux éléments à la fois dans une collection sans se préoccuper du système de verrouillage? J'ai regardé DispatcherTimer mais je ne sais pas si il va fournir tout ce dont j'ai besoin.

Une autre question - Est-il quelque chose que je peux faire pour accélérer la création de ces objets, afin de ne pas prendre tant de temps pour les ajouter à la collection? Actuellement, je utiliser de la sorte: Collection.Add(new Item(<params>)) Serait de générer les éléments à l'avance, dans un thread d'arrière-plan sans doute, de diminuer le temps nécessaire à l'ajout d'une quantité notable?

Edit: la Virtualisation n'est pas possible. Les exigences de spécifier un WrapPanel regard, de sorte que l'écran est en fait un ListBox qui est basé sur un modèle ItemsPanel

Edit2: Selon le chronomètre, le goulot d'étranglement est en fait de mettre des objets dans mon ObservableCollection. Je vais essayer de changer ce type de collection et de faire de mon propre notification, afin de voir si les vitesses il considérablement.

Edit3: la réponse est Donc dans un même endroit, j'ai résolu ce problème (avec l'aide de ci-dessous) par la création d'une classe qui hérite de ObservableCollection. Cette classe a deux choses - exposer une méthode pour ajouter des collections à la fois, et ajouté la possibilité de supprimer le CollectionChanged Événement. Avec ces changements, le temps qu'il faut pour ajouter 3000 articles est à peu près .4 secondes (97% d'amélioration). Cette lien détails de la mise en œuvre de ces changements.

source d'informationauteur steveg89