溫馨提示×

如何在WinForm中實現異步任務的取消與中斷

小樊
88
2024-08-21 12:19:30
欄目: 智能運維

要在WinForm中實現異步任務的取消和中斷,可以使用CancellationToken來實現。以下是一種通用的方法:

  1. 首先,在WinForm界面中創(chuàng)建一個取消按鈕,當用戶點擊此按鈕時,觸發(fā)取消操作。

  2. 創(chuàng)建一個CancellationTokenSource對象,并將其Token屬性傳遞給異步任務方法。

  3. 在異步任務方法中,定期檢查CancellationToken的IsCancellationRequested屬性,如果為true,則拋出OperationCanceledException異常來中斷任務。

  4. 在取消按鈕的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();
                }
                
                // 執(zhí)行異步任務
                // 例如:Thread.Sleep(1000);
            }
        }, cancellationTokenSource.Token);
    }
    catch (OperationCanceledException)
    {
        // 任務被取消
        MessageBox.Show("任務已取消");
    }
}

private void btnCancel_Click(object sender, EventArgs e)
{
    if (cancellationTokenSource != null)
    {
        cancellationTokenSource.Cancel();
    }
}

在上面的示例中,StartAsyncTask方法啟動一個異步任務,并在每次循環(huán)中檢查取消標記。取消按鈕的Click事件處理程序調用Cancel方法取消任務。當任務被取消時,會捕獲OperationCanceledException異常并顯示一個消息框。

0