Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengemas kini UI WPF dengan Selamat daripada Benang Latar Belakang Berasingan?

Bagaimana untuk Mengemas kini UI WPF dengan Selamat daripada Benang Latar Belakang Berasingan?

Mary-Kate Olsen
Lepaskan: 2025-01-06 02:51:40
asal
757 orang telah melayarinya

How to Safely Update a WPF UI from a Separate Background Thread?

Cara Mengemas kini UI daripada Thread Lain yang Berjalan di Kelas Lain

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:

  1. Penghantaran dari Thread Latar Belakang: Dalam urutan latar belakang, gunakan Dispatcher.Invoke untuk melaksanakan perwakilan pada urutan UI. Pendekatan ini membolehkan anda membuat kemas kini UI terus daripada urutan lain.
  2. Kendalikan Penghantaran dalam Kelas UI: Daftar pengendali acara dalam kelas UI untuk menerima permintaan kemas kini UI. Dalam pengendali acara, gunakan tindakan Invoke untuk mengemas kini UI.

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);
        }
    }
}
Salin selepas log masuk

Kelebihan Penghantaran Acara:

  • Mudah untuk dilaksanakan
  • Membenarkan kawalan tepat ke atas UI kemas kini
  • Mengekalkan pemisahan bersih antara kod UI dan bukan UI

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan