Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengemas kini UI WPF dengan Selamat daripada Benang Latar Belakang dalam Kelas Berasingan?
Dalam aplikasi WPF, anda ingin mengemas kini elemen UI (cth. , bar kemajuan, blok teks) semasa pengiraan panjang berjalan dalam urutan latar belakang milik kelas yang berbeza. Walau bagaimanapun, anda tidak pasti cara untuk menghadapi cabaran ini, kerana kaedah tradisional telah terbukti tidak berkesan.
Penyelesaian yang paling berkesan melibatkan penggunaan acara dan penghantar. Begini caranya:
Pengisytiharan Peristiwa dalam Kelas Pengiraan:
Dalam kelas yang bertanggungjawab untuk pengiraan (cth. , calcClass), mengisytiharkan acara untuk memberitahu UI tentang kemajuan kemas kini:
public event EventHandler<EventArgs<YourStatus>> ProgressUpdate;
Pendaftaran Acara di Kelas Utama:
Di utama Kelas UI (cth., MainWindow), daftar ke ProgressUpdate acara:
calcClass.ProgressUpdate += (s, e) => { Dispatcher.Invoke((Action)delegate() { /* Update UI */ }); };
Peristiwa Pencetusan dalam Pengiraan Kelas:
Dalam kaedah pengiraan, cetuskan acara ProgressUpdate apabila perlu:
//part 1 if(ProgressUpdate != null) ProgressUpdate(this, new YourStatus(status)); //part 2
Sementara acara dan penghantar biasanya lebih disukai, anda boleh menggunakan komponen BackgroundWorker secara alternatif:
Penciptaan Pekerja dan Pengendalian Acara dalam Kelas Utama:
var worker = new BackgroundWorker(); worker.DoWork += (s, e) => { /* Perform calculations */ }; worker.ProgressChanged += (s, e) => { /* Update UI with progress */ }; worker.RunWorkerCompleted += (s, e) => { /* Finalize UI updates */ };
Memulakan Pengiraan dalam Latar Belakang dalam Pengiraan Kelas:
worker.RunWorkerAsync(input);
Ingat bahawa menggunakan acara dan penghantar memberikan lebih kawalan dan fleksibiliti berbanding BackgroundWorker.
Dengan memohon teknik ini, anda boleh mengemas kini elemen UI dengan cekap daripada urutan latar belakang, memastikan responsif dan pengguna yang lancar interaksi.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini UI WPF dengan Selamat daripada Benang Latar Belakang dalam Kelas Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!