要在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異常并顯示一個消息框。