在使用 BackgroundWorker 进行取消操作时,可以使用 CancelAsync 方法来请求取消操作,并在 DoWork 事件中检查 CancellationPending 属性来确定是否请求了取消操作。以下是一个示例,展示了如何在 BackgroundWorker 中执行取消操作:
using System;
using System.ComponentModel;
using System.Windows.Forms;
public class MyForm : Form
{
private BackgroundWorker backgroundWorker;
public MyForm()
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.DoWork += BackgroundWorker_DoWork;
backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
}
private void StartButton_Click(object sender, EventArgs e)
{
if (!backgroundWorker.IsBusy)
{
backgroundWorker.RunWorkerAsync();
}
}
private void CancelButton_Click(object sender, EventArgs e)
{
if (backgroundWorker.WorkerSupportsCancellation)
{
backgroundWorker.CancelAsync();
}
}
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 0; i < 100; i++)
{
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
// 模拟耗时操作
System.Threading.Thread.Sleep(100);
}
e.Result = "操作完成";
}
private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
MessageBox.Show("操作已取消");
}
else if (e.Error != null)
{
MessageBox.Show("发生错误:" + e.Error.Message);
}
else
{
MessageBox.Show("操作完成:" + e.Result.ToString());
}
}
}
在上面的示例中,我们创建了一个名为 MyForm 的窗体类,并在窗体中添加了一个开始按钮(StartButton)和一个取消按钮(CancelButton)。当点击开始按钮时,我们调用 RunWorkerAsync 方法来启动 BackgroundWorker,并且在 DoWork 事件中执行耗时的操作。当点击取消按钮时,我们调用 CancelAsync 方法来请求取消操作。在 DoWork 事件中,我们使用 CancellationPending 属性来检查是否请求了取消操作,并在适当的时候设置 e.Cancel 属性为 true,以便在 RunWorkerCompleted 事件中进行处理。最后,根据操作的结果,我们在 RunWorkerCompleted 事件中显示相应的消息框。
这样,我们就可以在 BackgroundWorker 中执行取消操作了。