Apabila menggunakan perpustakaan luaran yang melakukan pengiraan yang panjang, adalah berguna untuk memaparkan bar kemajuan untuk memberikan maklum balas kepada pengguna. Dalam WinForms, anda boleh menggunakan kawalan ProgressBar untuk tujuan ini.
Jika pengiraan dilakukan secara serentak dalam kelas Borang anda, hanya gunakan kaedah PerformStep() untuk menambah ProgressBar selepas setiap pengiraan selesai. Contohnya:
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100000; progressBar1.Step = 1; for(int j = 0; j < 100000; j++) { // Perform calculation progressBar1.PerformStep(); } }</code>
Walau bagaimanapun, jika pengiraan dilakukan secara tak segerak dalam kaedah luaran, ProgressBar tidak boleh dikemas kini secara langsung daripada kaedah tersebut. Sebaliknya, gunakan kelas BackgroundWorker untuk melakukan pengiraan dan melaporkan kemajuan kembali ke urutan UI.
Kelas BackgroundWorker membolehkan anda melakukan operasi yang memakan masa dalam urutan berasingan sambil menyediakan kemas kini kemajuan pada urutan UI utama. Ia mempunyai kaedah ReportProgress yang membolehkan anda menghantar peratusan kemajuan kembali ke urutan UI.
Berikut ialah contoh menggunakan BackgroundWorker:
<code class="language-csharp">private void button1_Click(object sender, EventArgs e) { progressBar1.Maximum = 100; progressBar1.Step = 1; progressBar1.Value = 0; backgroundWorker.RunWorkerAsync(); } private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { var backgroundWorker = sender as BackgroundWorker; for (int j = 0; j < 100; j++) { // Perform calculation backgroundWorker.ReportProgress(j); Thread.Sleep(100); // 模拟耗时操作 } } private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }</code>
Dalam contoh ini, pengiraan dilakukan dalam kaedah backgroundWorker_DoWork, manakala kaedah backgroundWorker_ProgressChanged digunakan untuk mengemas kini ProgressBar pada utas UI.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini WinForms ProgressBar Semasa Pengiraan Asynchronous?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!