Kemas Kini Kawalan WPF Selamat Benang menggunakan Dispatcher.Invoke()
Aplikasi WPF selalunya memerlukan pengemaskinian elemen UI daripada urutan selain daripada utas UI utama. Memanipulasi kawalan WPF secara langsung daripada benang latar belakang adalah dilarang untuk mengekalkan keselamatan benang. Di sinilah Dispatcher.Invoke()
menjadi penting.
Bayangkan mengambil data daripada pelayan web pada urutan berasingan dan kemudiannya memaparkannya dalam aplikasi WPF anda. Percubaan kemas kini terus daripada urutan latar belakang akan membawa kepada pengecualian.
Peranan Penghantar
WPF menggunakan objek Dispatcher
untuk mengurus operasi UI. Ia memastikan semua tugas berkaitan UI dilaksanakan pada urutan yang betul, menghalang akses silang benang yang berpotensi bermasalah.
Memanfaatkan Penghantar.Invoke()
Untuk mengemas kini kawalan WPF dengan selamat daripada urutan bukan UI, gunakan Dispatcher.Invoke()
. Kaedah ini melaksanakan tindakan tertentu pada urutan UI. Contohnya, mengemas kini nilai bar kemajuan:
<code class="language-csharp">Application.Current.Dispatcher.BeginInvoke( DispatcherPriority.Background, new Action(() => this.progressBar.Value = 50));</code>
Coretan kod ini menggunakan Dispatcher.Invoke()
untuk memanggil perwakilan tanpa nama pada urutan UI. Perwakilan mengemas kini harta Value
bagi progressBar
kepada 50.
Alternatif: BackgroundWorker
Sebagai alternatif, pertimbangkan untuk menggunakan BackgroundWorker
. Komponen ini memudahkan operasi tak segerak, menyediakan acara untuk mendapatkan semula data di latar belakang dan mengemas kini urutan UI setelah selesai.
Ringkasan
Dispatcher.Invoke()
amat berharga untuk mengemas kini kawalan WPF daripada urutan bukan UI. Walau bagaimanapun, pastikan operasi Dispatcher
ringkas dan elakkan proses berjalan lama di dalamnya. Untuk lebih banyak tugas tak segerak yang terlibat, BackgroundWorker
menawarkan penyelesaian yang lebih sesuai.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Kawalan WPF dengan Selamat daripada Benang Bukan UI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!