Kemas kini UI selamat benang WPF: elakkan perangkap urutan latar belakang yang mengakses elemen UI
Dalam aplikasi WPF, keselamatan benang mesti dipastikan apabila mengemas kini elemen UI daripada urutan bukan UI. Ini boleh dicapai dengan memanggil operasi kemas kini UI pada urutan utama.
Dalam coretan kod berikut, anda cuba mengemas kini koleksi FileSystemWatcher
daripada urutan latar belakang yang dicetuskan oleh dataGridRows
. Walau bagaimanapun, ini menyebabkan ranap sistem kerana koleksi dataGridRows
beroperasi pada urutan UI utama, manakala monitor fail berjalan pada urutan berasingan.
Untuk menyelesaikan masalah ini dan mengakses elemen UI dengan selamat daripada urutan latar belakang, anda boleh menggunakan Dispatcher.Invoke()
. Kaedah ini membolehkan anda melaksanakan perwakilan pada urutan UI utama, memastikan operasi UI dilakukan secara segerak.
Berikut ialah cara melaksanakan Dispatcher.Invoke()
:
<code class="language-csharp">Application.Current.Dispatcher.Invoke(new Action(() => { dataGridRows.Add(ds); }));</code>
Sebagai alternatif, anda juga boleh menggunakan penjadual untuk elemen UI tertentu (seperti DataGrid itu sendiri):
<code class="language-csharp">dataGrid.Dispatcher.Invoke(new Action(() => { dataGridRows.Add(ds); }));</code>
Dengan menggunakan Dispatcher.Invoke()
anda memastikan kemas kini UI dilakukan pada urutan utama, menghalang kemungkinan keadaan perlumbaan dan ranap. Pendekatan ini membolehkan anda memanipulasi elemen UI dengan selamat daripada benang latar belakang sambil mengekalkan integriti aplikasi WPF anda.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Elemen UI WPF dengan Selamat daripada Benang Latar Belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!