在C#中,使用BackgroundWorker類來執行后臺任務并在任務執行過程中報告進度。以下是如何使用BackgroundWorker報告進度的步驟:
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += Worker_DoWork;
worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
Worker_DoWork
方法,該方法將在后臺線程上執行。在這個方法中,您可以執行耗時操作,并在適當的時候更新進度:private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
// 執行耗時操作
for (int i = 0; i <= 100; i++)
{
// 更新進度
worker.ReportProgress(i);
// 模擬耗時操作
System.Threading.Thread.Sleep(50);
}
}
Worker_RunWorkerCompleted
方法,該方法將在后臺任務完成后執行:private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
// 處理錯誤
MessageBox.Show("Error: " + e.Error.Message);
}
else
{
// 任務完成
MessageBox.Show("Task completed.");
}
}
worker.RunWorkerAsync();
Worker_DoWork
方法中更新其值:// 在UI線程上創建ProgressBar控件
ProgressBar progressBar = new ProgressBar();
progressBar.Minimum = 0;
progressBar.Maximum = 100;
progressBar.Value = 0;
this.Controls.Add(progressBar);
// 在Worker_DoWork方法中更新ProgressBar的值
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
// ...
// 更新進度
worker.ReportProgress(i, progressBar.Value);
// ...
}
// 在Worker_RunWorkerCompleted方法中更新ProgressBar的值
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// ...
// 更新UI線程上的ProgressBar值
this.Invoke((Action)(() => progressBar.Value = progressBar.Minimum));
// ...
}
這樣,您就可以使用BackgroundWorker類在C#中執行后臺任務并報告進度了。