在使用执行冗长计算的外部库时,显示进度条以向用户提供反馈非常有用。在 WinForms 中,可以使用 ProgressBar 控件实现此目的。
如果计算在您的 Form 类中同步执行,则只需在每次计算完成后使用 PerformStep() 方法递增 ProgressBar。例如:
<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>
但是,如果计算在外部方法中异步执行,则无法直接从该方法中更新 ProgressBar。而应该使用 BackgroundWorker 类执行计算并将进度报告回 UI 线程。
BackgroundWorker 类允许您在单独的线程中执行耗时的操作,同时向主 UI 线程提供进度更新。它有一个 ReportProgress 方法,允许您将进度百分比发送回 UI 线程。
以下是用 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>
在此示例中,计算在 backgroundWorker_DoWork 方法中执行,而 backgroundWorker_ProgressChanged 方法用于在 UI 线程上更新 ProgressBar。
以上是如何在异步计算期间更新 WinForms ProgressBar?的详细内容。更多信息请关注PHP中文网其他相关文章!