是的,C#中的BackgroundWorker
类提供了取消正在执行的任务的功能。你可以使用CancelAsync
方法来取消任务。以下是一个简单的示例:
using System;
using System.ComponentModel;
using System.Threading;
namespace BackgroundWorkerExample
{
class Program
{
static void Main(string[] args)
{
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.DoWork += (sender, e) =>
{
for (int i = 0; i < 10; i++)
{
if (worker.CancellationPending)
{
e.Cancel = true;
Console.WriteLine("任务已取消");
return;
}
Console.WriteLine($"正在处理: {i}");
Thread.Sleep(1000);
}
};
worker.ProgressChanged += (sender, e) =>
{
Console.WriteLine($"进度: {e.ProgressPercentage}%");
};
worker.RunWorkerAsync();
Console.WriteLine("按任意键取消任务...");
Console.ReadKey();
worker.CancelAsync();
}
}
}
在这个示例中,我们创建了一个BackgroundWorker
实例,并设置了WorkerSupportsCancellation
属性为true
。在DoWork
事件处理程序中,我们检查CancellationPending
属性,如果为true
,则设置e.Cancel
为true
并退出循环。在主线程中,我们等待用户按下任意键,然后调用CancelAsync
方法来取消任务。