Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengemas kini Bar Kemajuan WinForms Semasa Pengiraan Luaran Tanpa Menyekat UI?
Mengemas kini Bar Kemajuan WinForms Semasa Pengiraan Luaran Tanpa Penyekatan UI
Aplikasi WinForms selalunya perlu memaparkan kemajuan semasa pengiraan panjang yang dilakukan oleh perpustakaan luaran. Kuncinya ialah mengemas kini bar kemajuan tanpa membuat kaedah pengiraan bergantung pada UI.
Memanfaatkan BackgroundWorker
Komponen BackgroundWorker
menyediakan penyelesaian yang berkesan. Ia membolehkan pelaksanaan pengiraan selari dalam urutan berasingan, membenarkan kemas kini kemajuan berkala pada urutan UI utama. Berikut ialah ilustrasi:
<code class="language-csharp">private void Calculate(int i) { double pow = Math.Pow(i, i); } private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker1.RunWorkerAsync(); } private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { Calculate(j); // Perform your external calculation worker.ReportProgress(j); // Report progress to the UI thread Thread.Sleep(100); // Simulate work } } private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
Dalam senario ini, backgroundWorker1_DoWork
mengurus pengiraan dan melaporkan kemajuan melalui ReportProgress
. backgroundWorker1_ProgressChanged
kemudian mengemas kini bar kemajuan sewajarnya.
Kelebihan Menggunakan BackgroundWorker
Kaedah ini menawarkan beberapa kelebihan utama:
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Bar Kemajuan WinForms Semasa Pengiraan Luaran Tanpa Menyekat UI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!