c# BackgroundWorke使用例子
时间: 2024-08-29 07:03:00 浏览: 26
BackgroundWorker是.NET框架中的一个组件,用于在不干扰用户界面的线程中执行后台操作。它简化了多线程编程,并提供了取消操作、报告进度和完成时的通知等特性。下面是一个使用BackgroundWorker的简单例子:
首先,你需要在窗体中添加一个BackgroundWorker组件,然后可以为它的一些事件编写代码。
```csharp
using System;
using System.ComponentModel;
using System.Threading;
using System.Windows.Forms;
public partial class Form1 : Form
{
BackgroundWorker backgroundWorker;
public Form1()
{
InitializeComponent();
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true; // 开启进度报告
backgroundWorker.WorkerSupportsCancellation = true; // 支持取消操作
}
private void btnStart_Click(object sender, EventArgs e)
{
if (!backgroundWorker.IsBusy)
{
backgroundWorker.RunWorkerAsync(); // 启动后台操作
}
}
private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
if (backgroundWorker.CancellationPending) // 检查是否请求取消
{
e.Cancel = true;
break;
}
// 模拟耗时操作
Thread.Sleep(100);
backgroundWorker.ReportProgress(i); // 报告进度
}
}
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
lblProgress.Text = e.ProgressPercentage.ToString() + "%"; // 更新进度信息
}
private void backgroundWorker跑了完成后(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show("操作失败:" + e.Error.Message);
}
else if (e.Cancelled)
{
MessageBox.Show("操作已取消");
}
else
{
MessageBox.Show("操作完成");
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
if (backgroundWorker.IsBusy)
{
backgroundWorker.CancelAsync(); // 请求取消后台操作
}
}
}
```
在上述代码中,我们创建了一个BackgroundWorker实例,并设置了支持取消操作和报告进度。在`DoWork`事件中执行耗时的任务,在`ProgressChanged`事件中更新UI进度条,在`RunWorkerCompleted`事件中处理完成后的逻辑。用户可以通过点击"开始"按钮来启动后台任务,点击"取消"按钮来请求取消后台任务。