Existe uma coleção Observável Threadsafe no .NET 4?

Plataforma:WPF, .NET 4.0, C# 4.0

Problema: No Mainwindow.xaml, tenho um ListBox vinculado a uma coleção Customer, que atualmente é um ObservableCollection <Customer>.

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

Esta coleção pode ser atualizada através de várias fontes, como FileSystem, WebService etc.

Para permitir o carregamento paralelo de clientes, criei uma classe auxiliar

public class CustomerManager(ref ObsevableCollection<Customer> cust)

que gera internamente uma nova tarefa (da biblioteca de extensões paralelas) para cada origem do cliente e adiciona uma nova instância do cliente ao objeto de coleção do cliente (passado por ref ao seu ctor).

O problema é que ObservableCollection <T> (ou qualquer coleção para esse assunto) não pode ser usado em chamadas que não sejam o thread da interface do usuário e uma exceção é encontrada:

"NotSupportedException - este tipo de CollectionView não suporta alterações no SourceCollection de um thread diferente do thread do Dispatcher."

Eu tentei usar o

System.Collections.Concurrent.ConcurrentBag<Customer>

coleção, mas não implementa a interface INotifyCollectionChanged. Portanto, minha interface do WPF não será atualizada automaticamente.

Portanto, existe uma classe de coleção que implementa as notificações de alteração de propriedade / coleção e também permite chamadas de outros segmentos que não sejam da interface do usuário?

Pela minha bing / googling inicial, não há nenhum fornecido fora da caixa.

Editar: eu criei minha própria coleção que herda deConcurrentBag <Cliente> e também implementa oINotifyCollectionChanged interface. Mas, para minha surpresa, mesmo depois de invocá-lo em tarefas separadas, a interface do usuário do WPF trava até a tarefa ser concluída.As tarefas não devem ser executadas em paralelo e não bloqueiam o thread da interface do usuário?

Obrigado por todas as sugestões, com antecedência.

questionAnswers(4)

yourAnswerToTheQuestion