Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengemas kini WinForms ProgressBar Semasa Pengiraan Asynchronous?

Bagaimana untuk Mengemas kini WinForms ProgressBar Semasa Pengiraan Asynchronous?

Barbara Streisand
Lepaskan: 2025-01-14 11:47:43
asal
649 orang telah melayarinya

How to Update a WinForms ProgressBar During Asynchronous Calculations?

Panduan Penggunaan Bar Kemajuan Pengiraan Asynchronous WinForms

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.

Penggunaan bar kemajuan dalam pengiraan segerak

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

Penggunaan bar kemajuan dalam pengiraan tak segerak

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.

Gunakan BackgroundWorker

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

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!

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