Kemas Kini UI WPF Selamat Benang dengan Dispatcher.Invoke()
Aplikasi WPF selalunya memerlukan kemas kini UI daripada urutan latar belakang, contohnya, semasa pemprosesan data yang panjang. Walau bagaimanapun, mengakses elemen UI secara langsung daripada urutan bukan utama membawa kepada pengecualian rentas benang dan tingkah laku yang tidak dapat diramalkan. Penyelesaiannya terletak pada penggunaan Dispatcher.Invoke()
.
WPF Dispatcher
ialah komponen penting yang membolehkan komunikasi selamat benang dengan elemen UI. Dispatcher.Invoke()
menyediakan mekanisme untuk melaksanakan kod pada urutan UI utama.
Pemahaman Dispatcher.Invoke()
Dispatcher.Invoke()
menerima Action
perwakilan—kod yang akan dilaksanakan pada urutan UI. Ia menyekat sehingga urutan UI tersedia, kemudian melaksanakan perwakilan.
Contoh Ilustrasi: Kemas Kini Bar Kemajuan
Bayangkan mengemas kini bar kemajuan daripada urutan latar belakang:
<code class="language-csharp">// Background worker for data retrieval BackgroundWorker backgroundWorker = new BackgroundWorker(); // Progress reporting handler (runs on UI thread) backgroundWorker.ProgressChanged += (sender, e) => { // Safe progress bar update using Dispatcher.Invoke() Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, () => { this.progressBar.Value = e.ProgressPercentage; }); }; // Initiate background work backgroundWorker.RunWorkerAsync();</code>
Di sini, acara ProgressChanged
menyala pada urutan UI. Langkah penting ialah menggunakan Dispatcher.Invoke()
untuk mengemas kini progressBar
dengan selamat.
Nota Penting:
Dispatcher.Invoke()
paling sesuai untuk operasi ringkas mengelakkan sekatan benang UI. Untuk tugasan yang panjang, gunakan BackgroundWorker
atau Task
dengan mekanisme kesinambungan yang sesuai.
Elakkan operasi yang berjalan lama dalam Dispatcher.Invoke()
untuk mengelakkan UI membeku. Pertimbangkan teknik tak segerak seperti pemasa atau async
/await
untuk responsif UI yang lebih lancar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Kemas Kini Kawalan WPF dengan Selamat daripada Benang Bukan Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!