Kemas Kini UI WPF Selamat Benang: Panduan Praktikal
Aplikasi WPF memerlukan pengendalian kemas kini UI dengan teliti daripada urutan latar belakang. Mengakses terus elemen UI daripada urutan latar belakang adalah tidak selamat dan boleh menyebabkan ketidakstabilan aplikasi atau ranap sistem. Ini kerana elemen UI secara semula jadi terikat pada urutan aplikasi utama.
Mari kita pertimbangkan senario di mana pemerhati sistem fail mengemas kini grid data dengan entri fail log. Percubaan untuk menambah baris baharu secara langsung (mis., dataGridRows.Add(ds)
) dalam pengendali acara pemerhati pada urutan latar belakang adalah tidak betul.
Penyelesaian terletak pada penggunaan kelas Dispatcher
. Dispatcher
menyediakan mekanisme untuk melaksanakan kod marshal ke utas utama, memastikan keselamatan utas. Kaedah Dispatcher.Invoke
adalah kunci di sini.
Berikut ialah cara anda boleh mengubah suai watcher_Changed
pengendali acara untuk mengemas kini grid data dengan selamat:
<code class="language-csharp">private void watcher_Changed(object sender, FileSystemEventArgs e) { if (File.Exists(syslogPath)) { string line = GetLine(syslogPath, currentLine); foreach (CommRuleParser crp in crpList) { FunctionType ft = new FunctionType(); if (crp.ParseLine(line, out ft)) { Application.Current.Dispatcher.Invoke(() => DGAddRow(crp.Protocol, ft)); } } currentLine++; } else { MessageBox.Show(UIConstant.COMM_SYSLOG_NON_EXIST_WARNING); } }</code>
Dengan menggunakan Application.Current.Dispatcher.Invoke
, kaedah DGAddRow
dilaksanakan pada urutan utama. Ini menjamin capaian selamat kepada grid data dan menghalang konflik threading. Pendekatan ini memastikan semua kemas kini UI dikendalikan dengan betul dan menghalang kemungkinan ranap atau gelagat yang tidak dapat diramalkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini UI WPF dengan Selamat daripada Benang Latar Belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!