Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyahgandingkan Kemas Kini Bar Kemajuan daripada Pengiraan Luaran dalam C#?

Bagaimana untuk Menyahgandingkan Kemas Kini Bar Kemajuan daripada Pengiraan Luaran dalam C#?

Linda Hamilton
Linda Hamiltonasal
2025-01-14 10:49:44389semak imbas

How to Decouple Progress Bar Updates from External Calculations in C#?

Kemas kini bar kemajuan dalam C# mengendalikan pengiraan luaran tanpa halangan

Dalam sesetengah kes, anda mungkin perlu memaparkan kemajuan untuk pengiraan berterusan yang dilakukan dalam perpustakaan luaran. Walau bagaimanapun, anda ingin memisahkan kaedah pengiraan daripada kebergantungan langsung bar kemajuan.

Pertimbangkan contoh berikut:

<code class="language-c#">private void CaluculateAll(System.Windows.Forms.ProgressBar progressBar)
{
    progressBar.Maximum = 100000;
    progressBar.Step = 1;

    for (int j = 0; j < 100000; j++)
    {
        // Perform some calculation
        progressBar.PerformStep();
    }
}</code>

Walaupun pendekatan ini memastikan pelaporan kemajuan, ia mengikat kaedah CaluculateAll dengan ketat pada bar kemajuan. Untuk menyelesaikan masalah ini, pertimbangkan untuk menggunakan kelas BackgroundWorker:

<code class="language-c#">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 some calculation
        backgroundWorker.ReportProgress(j);
    }
}

private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progressBar1.Value = e.ProgressPercentage;
}</code>

Pengasingan ini membolehkan pengiraan dilakukan secara bebas daripada UI sambil menyediakan mekanisme untuk pelaporan kemajuan tambahan. BackgroundWorker mengendalikan benang dan penyegerakan yang diperlukan untuk mengelakkan antara muka daripada membeku semasa pengiraan.

Dengan menggunakan BackgroundWorker dengan berkesan, anda boleh mengemas kini bar kemajuan dengan lancar tanpa menjejaskan fleksibiliti dan penyahgandingan pangkalan kod anda.

Atas ialah kandungan terperinci Bagaimana untuk Menyahgandingkan Kemas Kini Bar Kemajuan daripada Pengiraan Luaran dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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