Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk memastikan pengubahsuaian benang yang selamat dari ObservableCollections dalam WPF?

Bagaimana untuk memastikan pengubahsuaian benang yang selamat dari ObservableCollections dalam WPF?

Susan Sarandon
Susan Sarandonasal
2025-01-26 22:41:11541semak imbas

How to Ensure Thread-Safe Modifications of ObservableCollections in WPF?

Pengubahsuaian selamat benang bagi ObservableCollection dalam WPF

Apabila menggunakan ObservableCollection dalam WPF, mengekalkan keselamatan benang adalah penting. Cuba untuk mengubah suai ObservableCollection daripada urutan pekerja tanpa penyegerakan yang betul akan menghasilkan pengecualian.

Untuk mengubah suai ObservableCollection daripada urutan pekerja, anda mesti menggunakan kaedah pada urutan UI BindingOperations.EnableCollectionSynchronization. Kaedah ini melakukan langkah berikut:

  1. Mengendalikan acara CollectionChanged: Ia menetapkan urutan UI sebagai penghantar untuk acara CollectionChanged, memastikan ia dikendalikan pada urutan UI.
  2. Kunci koleksi semasa pengubahsuaian: Ia memperoleh kunci pada koleksi sehingga acara marshaled dikendalikan. Ini menghalang pengendali acara urutan UI daripada mengakses koleksi semasa urutan pekerja mengubah suainya.

Langkah untuk mengendalikan koleksi selamat benang dengan betul:

  1. Pilih mekanisme penguncian: Tentukan sama ada anda akan menggunakan pernyataan lock tradisional atau mekanisme penyegerakan tersuai.
  2. Dayakan penyegerakan: Pada urutan UI, panggil beban berlebihan yang sesuai bagi EnableCollectionSynchronization berdasarkan mekanisme penguncian yang dipilih.
  3. Dapatkan kunci sebelum pengubahsuaian: Dalam urutan pekerja, gunakan mekanisme yang sama untuk mengunci koleksi sebelum membuat sebarang pengubahsuaian.

Contoh penggunaan pernyataan kunci:

<code class="language-csharp">public class ViewModel
{
    private readonly ObservableCollection<Item> _items;

    public ViewModel()
    {
        _items = new ObservableCollection<Item>();
        BindingOperations.EnableCollectionSynchronization(_items, new object());
    }

    public void UpdateCollection()
    {
        var worker = new Thread(() =>
        {
            lock (_items)
            {
                _items.Add(new Item());
            }
        });
        worker.Start();
    }
}</code>

Dengan melaksanakan langkah-langkah ini, anda boleh mengemas kini ObservableCollection dengan selamat daripada urutan pekerja tanpa menjejaskan integriti data.

Atas ialah kandungan terperinci Bagaimana untuk memastikan pengubahsuaian benang yang selamat dari ObservableCollections dalam WPF?. 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