Gibt es eine Threadsafe Observable-Auflistung in .NET 4?

Plattform:WPF, .NET 4.0, C# 4.0

Problem: Im Hauptfenster.xaml ist eine ListBox an eine Kundensammlung gebunden, die derzeit eine ObservableCollection <Kunde> ist.

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

Diese Sammlung kann über mehrere Quellen wie FileSystem, WebService usw. aktualisiert werden.

Um das parallele Laden von Kunden zu ermöglichen, habe ich eine Hilfsklasse erstellt

public class CustomerManager(ref ObsevableCollection<Customer> cust)

das erzeugt intern eine neue Aufgabe (aus der Bibliothek für parallele Erweiterungen) für jede Kundenquelle und fügt dem Kundenerfassungsobjekt eine neue Kundeninstanz hinzu (die von ref an dessen ctor übergeben wird).

Das Problem besteht darin, dass ObservableCollection <T> (oder eine andere Auflistung in diesem Fall) nicht für andere Aufrufe als den UI-Thread verwendet werden kann und eine Ausnahme auftritt:

"NotSupportedException - Dieser CollectionView-Typ unterstützt keine Änderungen an seiner SourceCollection von einem anderen Thread als dem Dispatcher-Thread."

Ich habe versucht, mit der

System.Collections.Concurrent.ConcurrentBag<Customer>

collection implementiert aber keine INotifyCollectionChanged-Schnittstelle. Daher wird meine WPF-Benutzeroberfläche nicht automatisch aktualisiert.

So gibt es eine Auflistungsklasse, die sowohl Benachrichtigungen zu Eigenschafts- / Auflistungsänderungen als auch Aufrufe von anderen Nicht-UI-Threads zulässt?

Bei meinem ersten Versuch / Googeln ist keine sofort einsatzbereit.

Edit: Ich habe meine eigene Sammlung erstellt, die von @ erbConcurrentBag <Kunde> und implementiert auch das INotifyCollectionChanged Schnittstelle. Aber zu meiner Überraschung bleibt die WPF-Benutzeroberfläche auch nach dem Aufrufen in separaten Tasks hängen, bis die Task abgeschlossen ist. Sollen die Tasks nicht parallel ausgeführt werden und den UI-Thread nicht blockieren??

Vielen Dank für alle Vorschläge im Voraus.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage