Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menyahgandingkan Kemas Kini Bar Kemajuan daripada Pengiraan Luaran dalam C#?
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!