«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я получаю сообщение «Этот тип CollectionView не поддерживает изменения в его SourceCollection из потока, отличного от потока Dispatcher»?

Почему я получаю сообщение «Этот тип CollectionView не поддерживает изменения в его SourceCollection из потока, отличного от потока Dispatcher»?

Опубликовано 4 ноября 2024 г.
Просматривать:412

Why Am I Getting \

Обработка ошибок: «Этот тип CollectionView не поддерживает изменения в своей SourceCollection из потока, отличного от потока Dispatcher»

Данное сообщение об ошибке: «Этот тип CollectionView не поддерживает изменения в своей SourceCollection из потока, отличного от потока Dispatcher», указывает на попытку изменить ObservableCollection из потока, отличного от пользовательского интерфейса.

Как объяснено в предоставленном коде, Load( ViewModel's Load( ) заполняет _matchObsCollection ObservableCollection из списка объектов GetMatchDetailsDC. Однако это обновление выполняется вне потока пользовательского интерфейса.

Thread Affinity и Dispatcher

В WPF элементы пользовательского интерфейса, такие как DataGrid, создаются в потоке пользовательского интерфейса и поддерживают сходство потоков. Любые изменения этих элементов должны выполняться из потока пользовательского интерфейса, чтобы обеспечить потокобезопасность.

Устранение ошибки

Чтобы решить эту проблему, вы можете использовать App.Current.Dispatcher.Invoke(( Action)delegate { ... }) метод для вызова обновления коллекции в потоке пользовательского интерфейса:

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

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

Асинхронная загрузка данных в WPF

Хотя использование асинхронных методов для загрузки данных является обычным явлением, важно учитывать потокобезопасность при манипулировании элементами пользовательского интерфейса из потоков, не связанных с пользовательским интерфейсом. Всегда гарантируйте, что любые обновления элементов пользовательского интерфейса, такие как изменение ObservableCollection, выполняются в потоке пользовательского интерфейса, чтобы избежать ошибок, связанных с потоком.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3