Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengemas kini UI WPF daripada Benang Berasingan dalam Kelas Berbeza?
S: Bagaimana untuk mengemas kini UI WPF daripada benang pekerja yang dijalankan dalam kelas berasingan?
J: Untuk mengemas kini UI daripada yang lain benang:
Komunikasi Berasaskan Acara:
Contoh Penggunaan Acara:
// Main window class private void startCalc(object sender, RoutedEventArgs e) { // Create a new worker class instance CalcClass calc = new CalcClass(); // Register event handler to receive UI update notifications calc.ProgressUpdate += (s, e) => { Dispatcher.Invoke((Action)(() => { /* Update UI here */ })); }; // Start the worker thread Thread calcThread = new Thread(new ParameterizedThreadStart(calc.TestMethod)); calcThread.Start(input); } // Worker class public class CalcClass { public event EventHandler ProgressUpdate; public void TestMethod(object input) { // Perform calculations // Raise event to notify UI update if (ProgressUpdate != null) ProgressUpdate(this, new EventArgs()); } }
Nota Tambahan:
Penyelesaian Alternatif Menggunakan Tugas:
Dalam .NET 4.5 dan lebih baru, anda juga boleh menggunakan pengaturcaraan tak segerak dengan Tugas untuk mengemas kini UI dengan lebih bersih dan cekap cara.
Kod Kemas Kini Menggunakan Tugas:
// Main window class private async void buttonDoCalc_Clicked(object sender, EventArgs e) { // Create a new worker class instance CalcClass calc = new CalcClass(); // Start the asynchronous calculation await calc.CalcAsync(); } // Worker class public class CalcClass { public async Task CalcAsync() { // Perform calculations // Update UI using Dispatcher.Invoke Dispatcher.Invoke((Action)(() => { /* Update UI here */ })); } }
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini UI WPF daripada Benang Berasingan dalam Kelas Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!