Данное сообщение об ошибке: «Этот тип CollectionView не поддерживает изменения в своей SourceCollection из потока, отличного от потока Dispatcher», указывает на попытку изменить ObservableCollection из потока, отличного от пользовательского интерфейса.
Как объяснено в предоставленном коде, Load( ViewModel's Load( ) заполняет _matchObsCollection ObservableCollection из списка объектов GetMatchDetailsDC. Однако это обновление выполняется вне потока пользовательского интерфейса.
В 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