使用Reset()方法和ReportProgress()事件确保ProgressBar在第二次运行时的正确表现。
以下是示例代码:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { for (int i = 1; i <= 100; i++) { if (backgroundWorker1.CancellationPending) { e.Cancel = true; return; } else { // 在这里写逻辑代码 // ...
backgroundWorker1.ReportProgress(i);
}
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { progressBar1.Value = e.ProgressPercentage; }
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { MessageBox.Show("Error: " + e.Error.Message); } else if (e.Cancelled) { MessageBox.Show("Cancelled"); } else { MessageBox.Show("Completed"); }
progressBar1.Value = progressBar1.Minimum; // 重置进度条
}
private void button1_Click(object sender, EventArgs e) { if (!backgroundWorker1.IsBusy) { backgroundWorker1.RunWorkerAsync(); } else { backgroundWorker1.CancelAsync(); backgroundWorker1.RunWorkerAsync(); } }