Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Saya Mendapat \"Jenis CollectionView ini tidak menyokong perubahan pada SourceCollection daripada utas yang berbeza daripada utas Dispatcher\"?

Mengapa Saya Mendapat \"Jenis CollectionView ini tidak menyokong perubahan pada SourceCollection daripada utas yang berbeza daripada utas Dispatcher\"?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-01 21:45:30584semak imbas

Why Am I Getting

Pengendalian Ralat: "Jenis CollectionView ini tidak menyokong perubahan pada SourceCollection daripada thread yang berbeza daripada thread Dispatcher"

Mesej ralat yang diberikan, "Jenis ini of CollectionView tidak menyokong perubahan pada SourceCollection daripada thread yang berbeza daripada Dispatcher thread," menunjukkan percubaan untuk mengubah suai ObservableCollection daripada thread bukan UI.

Seperti yang dijelaskan dalam kod yang disediakan, ViewModel's Load( ) kaedah mengisi _matchObsCollection ObservableCollection daripada senarai objek GetMatchDetailsDC. Walau bagaimanapun, kemas kini ini dilakukan di luar urutan UI.

Perkaitan Benang dan Penghantar

Dalam WPF, elemen UI, seperti DataGrid, dicipta pada utas UI dan mengekalkan pertalian benang. Sebarang pengubahsuaian kepada elemen ini mesti dilakukan daripada urutan UI untuk memastikan keselamatan rangkaian.

Menyelesaikan Ralat

Untuk menyelesaikan isu ini, anda boleh menggunakan App.Current.Dispatcher.Invoke(( Tindakan)delegasikan kaedah { ... }) untuk menggunakan kemas kini koleksi pada urutan UI:

<code class="csharp">matchList = proxy.GetMatch().ToList();

foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
{
    App.Current.Dispatcher.Invoke((Action)delegate  // <-- Here
    {
        _matchObsCollection.Add(match);
    });
}</code>

Pemuatan Data Tak Segerak dalam WPF

Walaupun menggunakan kaedah tak segerak untuk pemuatan data adalah perkara biasa, adalah penting untuk mempertimbangkan keselamatan utas apabila memanipulasi elemen UI daripada utas bukan UI. Sentiasa pastikan bahawa sebarang kemas kini kepada elemen UI, seperti mengubah suai ObservableCollection, dilakukan pada urutan UI untuk mengelakkan ralat berkaitan urutan.

Atas ialah kandungan terperinci Mengapa Saya Mendapat \"Jenis CollectionView ini tidak menyokong perubahan pada SourceCollection daripada utas yang berbeza daripada utas Dispatcher\"?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn