Pernyataan Masalah:
Dalam WPF berbilang benang aplikasi, terdapat keperluan untuk mengemas kini UI daripada benang latar belakang yang berjalan dalam kelas yang berasingan. Matlamatnya adalah untuk memastikan UI responsif semasa pengiraan yang panjang sedang dilakukan.
Penyelesaian menggunakan Penghantaran Acara:
Kod Contoh:
public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void startCalc(object sender, RoutedEventArgs e) { inputValues input = new inputValues(); calcClass calculations = new calcClass(); try { // Parse user inputs } catch { // Handle input errors } // Register event handler calculations.ProgressUpdate += OnProgressUpdate; // Start background calculations Thread calcthread = new Thread( new ParameterizedThreadStart(calculations.testMethod)); calcthread.Start(input); } private void OnProgressUpdate(object sender, YourEventArgs args) { Dispatcher.Invoke((Action)delegate() { // Update UI based on event arguments }); } } public class calcClass { public event EventHandler<YourEventArgs> ProgressUpdate; public void testmethod(inputValues input) { for (int i = 0; i < 1000; i++) { // Perform calculations // Raise ProgressUpdate event when needed if (ProgressUpdate != null) ProgressUpdate(this, new YourEventArgs(status)); Thread.Sleep(10); } } }
Kelebihan Penghantaran Acara:
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini UI WPF dengan Selamat daripada Benang Latar Belakang Berasingan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!