"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que estou recebendo "Este tipo de CollectionView não suporta alterações em seu SourceCollection de um thread diferente do thread do Dispatcher"?

Por que estou recebendo "Este tipo de CollectionView não suporta alterações em seu SourceCollection de um thread diferente do thread do Dispatcher"?

Publicado em 2024-11-04
Navegar:478

Why Am I Getting \

Tratamento de erros: "Este tipo de CollectionView não suporta alterações em seu SourceCollection de um thread diferente do thread do Dispatcher"

A mensagem de erro fornecida, "Este tipo de CollectionView não suporta alterações em seu SourceCollection de um thread diferente do thread do Dispatcher", indica uma tentativa de modificar um ObservableCollection de um thread não UI.

Conforme explicado no código fornecido, o Load( do ViewModel ) preenche o _matchObsCollection ObservableCollection de uma lista de objetos GetMatchDetailsDC. No entanto, esta atualização é realizada fora do thread da UI.

Thread Affinity e o Dispatcher

No WPF, os elementos da UI, como o DataGrid, são criados no thread da UI e mantêm um afinidade do fio. Quaisquer modificações nesses elementos devem ser realizadas no thread da UI para garantir a segurança do thread.

Resolvendo o erro

Para resolver esse problema, você pode usar o método App.Current.Dispatcher.Invoke(( Action)delegate { ... }) método para invocar a atualização da coleção no thread da UI:

matchList = proxy.GetMatch().ToList();

foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
    App.Current.Dispatcher.Invoke((Action)delegate  // 

Carregamento assíncrono de dados no WPF

Embora o uso de métodos assíncronos para carregamento de dados seja comum, é importante considerar a segurança do thread ao manipular elementos de UI de threads que não são de UI. Sempre certifique-se de que quaisquer atualizações nos elementos da UI, como a modificação de um ObservableCollection, sejam executadas no thread da UI para evitar erros relacionados ao thread.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3