Kemas kini UI yang lancar semasa tugas yang memakan masa dalam WPF
Apabila melaksanakan tugas yang berjalan lama dalam aplikasi WPF, adalah penting untuk memastikan antara muka pengguna (UI) responsif. Ini menghalang pembekuan UI dan memberikan pengalaman pengguna yang lebih lancar. Tidak seperti aplikasi Windows Forms tradisional, WPF tidak menyediakan kaedah Application.DoEvents()
. Walau bagaimanapun, kita boleh menggunakan kaedah Dispatcher.Invoke()
untuk mencapai kefungsian yang serupa.
Penyelesaian:
Coretan kod berikut menunjukkan kaedah DoEvents()
tersuai yang menggunakan Dispatcher.Invoke()
untuk memaksa kemas kini UI:
<code class="language-csharp">public static void DoEvents() { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { })); }</code>
Contoh kod:
Contoh berikut menunjukkan cara menggunakan kaedah DoEvents()
pada acara klik butang. Acara ini menskalakan butang pada kanvas dan mengemas kini UI selepas setiap zum untuk mengelakkan ketinggalan:
<code class="language-csharp">// ...其他代码... private void myButton_Click(object sender, RoutedEventArgs e) { // ...其他代码... myScaleTransform.ScaleX = myScaleTransform.ScaleY = myScaleTransform.ScaleX + 1; DoEvents(); // 强制 UI 更新 // ...其他代码... } // ...其他代码...</code>
Hasil keluaran:
Sebelum menggunakan kaedah DoEvents()
, output mungkin menunjukkan kemas kini UI yang tertunda. Contohnya:
<code>scale 1, location: 296;315 scale 2, location: 296;315 scale 2, location: 346;365 scale 3, location: 346;365 scale 3, location: 396;415 scale 4, location: 396;415</code>
Dengan memanggil kaedah DoEvents()
selepas setiap zum, UI akan dikemas kini serta-merta untuk mengelakkan ketinggalan.
Dengan menggunakan kaedah Dispatcher.Invoke()
untuk meniru gelagat Application.DoEvents()
, anda boleh memastikan bahawa UI aplikasi WPF anda kekal responsif dan lancar semasa melakukan operasi yang memakan masa. Ini penting untuk menyediakan pengalaman pengguna yang baik.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Application.DoEvents() dalam WPF untuk Kemas Kini UI Lancar Semasa Tugasan Intensif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!