Est-il un des Threads collection Observable dans .NET 4?

Plate-forme: WPF, .NET 4.0, C# 4.0

Problème: Dans la Mainwindow.xaml j'ai une ListBox lié à un Client qui est actuellement une ObservableCollection< Client >.

ObservableCollection<Customer> c = new ObservableCollection<Customer>();

Cette collection peut être mis à jour via de multiples sources, comme le système de fichiers, WebService, etc.

Pour permettre parallèle de chargement de Clients, j'ai créé une classe d'assistance

public class CustomerManager(ref ObsevableCollection<Customer> cust)

en interne engendre une nouvelle Tâche (à partir Parallèle de la bibliothèque d'extensions) pour chaque Source de clients et ajoute une nouvelle instance de Client pour le client, objet de collection (adoptée par le ref à son ctor).

Le problème est que ObservableCollection< T> (ou n'importe quelle collection d'ailleurs) ne peut pas être utilisé à partir d'appels d'autre que le thread d'INTERFACE utilisateur et une exception est produite:

"NotSupportedException – Ce type de CollectionView ne prend pas en charge les modifications de son SourceCollection à partir d'un thread différent de l'expéditeur au fil."

J'ai essayé d'utiliser le

System.Collections.Concurrent.ConcurrentBag<Customer>

de la collection, mais elle n'est pas de mettre en œuvre INotifyCollectionChanged interface. D'où mon WPF de l'INTERFACE utilisateur de ne pas mettre à jour automatiquement.

Alors, est-il une collection classe qui implémente à la fois de la propriété ou à la collection des notifications de changement et permet aussi des appels à partir d'autres non-INTERFACE fils?

Par ma première bing/google, il n'y a aucun fournis à l'extérieur de la boîte.

Edit: j'ai créé ma propre collection qui hérite de ConcurrentBag< Client > et met également en œuvre la INotifyCollectionChanged interface. Mais à ma grande surprise, même après avoir invoqué dans des tâches distinctes, l'INTERFACE utilisateur WPF se bloque jusqu'à ce que la tâche est terminée. Ne sont pas les tâches censé être exécutés en parallèle et de ne pas bloquer le thread d'INTERFACE utilisateur?

Merci pour toutes les suggestions, à l'avance.

  • Vous pouvez essayer de la mise en œuvre de ce post.
  • Merci. Semble bon. L'essayer!
  • Salut Darin, j'ai utilisé la collection de la classe comme mentionné dans le billet de blog. Comme mentionné dans ma question, j'ai été en mesure de fusionner les deux Concurrentes et de Notification des changements en créant ma propre collection de la classe d'hériter et de mettre en œuvre la classe requise/interfaces, mais l'INTERFACE utilisateur est bloqué. La raison principale de l'utilisation des Tâches était d'avoir la réactivité de l'INTERFACE utilisateur. Qui ne fonctionne pas encore! Merci beaucoup pour votre suggestion.
  • Le lien ne fonctionne pas, mais je crois que j'ai trouvé version en cache par un heureux accident
  • Voici un lien de travail pour le blog [archive.org]: http://web.archive.org/web/20101105144104/http://www.deanchalk.me.uk/post/Thread-Safe-Dispatcher-Safe-Observable-Collection-for-WPF.aspx
  • votre question est tout de même postuler?
  • Pour un thread-safe solution d'essai codeproject.com/Articles/64936/...

InformationsquelleAutor Vaibhav | 2010-10-10