在外部计算期间更新 WinForms 进度条而不阻塞 UI
WinForms 应用程序通常需要在外部库执行的冗长计算期间显示进度。 关键是更新进度条,而不让计算方法依赖于UI。
利用BackgroundWorker
BackgroundWorker
组件提供了一个有效的解决方案。它支持在单独的线程中并行执行计算,从而允许定期更新主 UI 线程的进度。 这是一个例子:
<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>
在此场景中,backgroundWorker1_DoWork
管理计算并通过 ReportProgress
报告进度。 backgroundWorker1_ProgressChanged
然后相应地更新进度条。
使用BackgroundWorker的优点
此方法具有几个关键优势:
以上是如何在外部计算期间更新 WinForms 进度条而不阻塞 UI?的详细内容。更多信息请关注PHP中文网其他相关文章!