Rumah >pembangunan bahagian belakang >C++ >Apakah persamaan WPF bagi Application.DoEvents()?
Simulasikan gelagat Application.DoEvents() dalam WPF
Dalam pembangunan WPF, anda mungkin perlu memuat semula antara muka dan melaksanakan tugas tak segerak sebelum mengendalikan acara. Kaedah Application.DoEvents()
dalam WinForms boleh mencapai fungsi ini, tetapi dalam .NET 4 dan ke atas, WPF tidak mempunyai kaedah ini.
Application.DoEvents()
: Ia menjeda operasi semasa, mengawal tangan ke pam mesej untuk mengendalikan peristiwa sistem (seperti pergerakan tetikus, penekanan kekunci), dan kemudian mengembalikan kawalan kepada aplikasi. Ini membolehkan aplikasi mengemas kini antara muka dan melaksanakan tugas latar belakang lain sebelum mengendalikan acara.
Alternatif dalam WPF: Dispatcher.Invoke()
WPF menggunakan kaedah Dispatcher.Invoke()
untuk mencapai kefungsian yang serupa. Kaedah ini membolehkan anda menghantar perwakilan kepada Dispatcher
dan melaksanakannya secara tidak segerak pada urutan UI.
Gunakan Dispatcher.Invoke()
untuk mensimulasikan Application.DoEvents()
:
Kod berikut menunjukkan cara untuk menyesuaikan kaedah DoEvents()
:
<code class="language-csharp">public static void DoEvents() { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new Action(delegate { })); }</code>
Penggunaan:
Panggil kaedah ini apabila anda perlu memuat semula antara muka atau melakukan tugas tak segerak, seperti sebelum mengendalikan acara atau melakukan operasi tak segerak. Ini akan memastikan bahawa antara muka WPF dikemas kini sambil terus mengendalikan acara masuk.
Sebagai contoh, dalam kod contoh, memanggil myButton_Click()
dalam kaedah DoEvents()
boleh menyelesaikan masalah koordinat yang tidak tepat:
<code class="language-csharp">private void myButton_Click(object sender, RoutedEventArgs e) { DoEvents(); // 添加此行 Console.WriteLine("scale {0}, location: {1}", myScaleTransform.ScaleX, myCanvas.PointToScreen(GetMyByttonLocation())); myScaleTransform.ScaleX = myScaleTransform.ScaleY = myScaleTransform.ScaleX + 1; Console.WriteLine("scale {0}, location: {1}", myScaleTransform.ScaleX, myCanvas.PointToScreen(GetMyByttonLocation())); }</code>
Dengan memanggil Click
sebelum mengendalikan acara DoEvents()
, pastikan antara muka dikemas kini untuk mendapatkan nilai koordinat yang betul. Ini mengelakkan ralat pengiraan koordinat disebabkan oleh kemas kini antara muka yang tertunda yang disebabkan oleh operasi tak segerak.
Atas ialah kandungan terperinci Apakah persamaan WPF bagi Application.DoEvents()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!