Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Kemas Kini Elemen UI WPF dengan Selamat daripada Benang Latar Belakang?

Bagaimanakah Saya Boleh Kemas Kini Elemen UI WPF dengan Selamat daripada Benang Latar Belakang?

Susan Sarandon
Susan Sarandonasal
2025-01-11 21:11:42693semak imbas

How Can I Safely Update WPF UI Elements from a Background Thread?

Akses selamat kepada utas UI (utama) dalam WPF

Dalam aplikasi WPF, berinteraksi dengan utas UI daripada utas bukan UI (seperti utas latar belakang) boleh menyebabkan pengecualian dan ranap sistem. Ini kerana urutan UI mempunyai penjadual yang mengurus kemas kini pada UI dan memastikan keselamatan rangkaian.

Soalan:

Pertimbangkan kod berikut, yang mengemas kini DataGrid apabila fail log diubah suai:

<code class="language-c#">private void watcher_Changed(object sender, FileSystemEventArgs e)
{
    if (File.Exists(syslogPath))
    {
        ...
        DGAddRow(crp.Protocol, ft);
    }
}</code>

Kaedah DGAddRow menambah baris baharu pada DataGrid, yang mesti dilakukan pada urutan UI. Walau bagaimanapun, memandangkan watcher_Changed melaksanakan pada urutan latar belakang, ia cuba mengubah suai UI secara langsung, menyebabkan pengecualian.

Penyelesaian:

Untuk mengakses urutan UI dengan selamat, gunakan kaedah Dispatcher.Invoke Aplikasi atau mana-mana UIElement. Kaedah ini membolehkan anda melaksanakan kod pada utas UI.

<code class="language-c#">Application.Current.Dispatcher.Invoke(new Action(() => {
    DGAddRow(crp.Protocol, ft);
}));</code>

Dengan menggunakan Dispatcher.Invoke, kod yang mengemas kini UI akan dilaksanakan pada utas utama, sekali gus mengelakkan isu penjalinan yang berpotensi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Elemen UI WPF dengan Selamat daripada Benang Latar Belakang?. 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