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
Lepaskan: 2025-01-26 22:41:11
asal
496 orang telah melayarinya

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan