要在WinForm中实现异步任务的取消和中断,可以使用CancellationToken来实现。以下是一种通用的方法:
首先,在WinForm界面中创建一个取消按钮,当用户点击此按钮时,触发取消操作。
创建一个CancellationTokenSource对象,并将其Token属性传递给异步任务方法。
在异步任务方法中,定期检查CancellationToken的IsCancellationRequested属性,如果为true,则抛出OperationCanceledException异常来中断任务。
在取消按钮的Click事件处理程序中,调用CancellationTokenSource的Cancel方法来取消任务。
下面是一个简单的示例代码:
private CancellationTokenSource cancellationTokenSource;
private async void StartAsyncTask()
{
cancellationTokenSource = new CancellationTokenSource();
try
{
await Task.Run(() =>
{
for (int i = 0; i < 100; i++)
{
// 检查取消标记
if (cancellationTokenSource.Token.IsCancellationRequested)
{
throw new OperationCanceledException();
}
// 执行异步任务
// 例如:Thread.Sleep(1000);
}
}, cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
// 任务被取消
MessageBox.Show("任务已取消");
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
if (cancellationTokenSource != null)
{
cancellationTokenSource.Cancel();
}
}
在上面的示例中,StartAsyncTask方法启动一个异步任务,并在每次循环中检查取消标记。取消按钮的Click事件处理程序调用Cancel方法取消任务。当任务被取消时,会捕获OperationCanceledException异常并显示一个消息框。