BackgroundWorker.CancelAsync 方法

定义

请求取消挂起的后台操作。

public:
 void CancelAsync();
public void CancelAsync ();
member this.CancelAsync : unit -> unit
Public Sub CancelAsync ()

例外

示例

下面的代码示例演示如何使用 CancelAsync 方法取消异步 (“background”) 操作。 此代码示例是为 BackgroundWorker 类提供的一个更大示例的一部分。

void cancelAsyncButton_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{  
   // Cancel the asynchronous operation.
   this->backgroundWorker1->CancelAsync();
   
   // Disable the Cancel button.
   cancelAsyncButton->Enabled = false;
}
private void cancelAsyncButton_Click(System.Object sender, 
    System.EventArgs e)
{   
    // Cancel the asynchronous operation.
    this.backgroundWorker1.CancelAsync();

    // Disable the Cancel button.
    cancelAsyncButton.Enabled = false;
}
Private Sub cancelAsyncButton_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles cancelAsyncButton.Click
    
    ' Cancel the asynchronous operation.
    Me.backgroundWorker1.CancelAsync()

    ' Disable the Cancel button.
    cancelAsyncButton.Enabled = False
    
End Sub

注解

CancelAsync 提交终止挂起后台操作的请求, CancellationPending 并将 属性设置为 true

调用 CancelAsync时,辅助角色方法有机会停止其执行并退出。 工作器代码应定期检查 属性,CancellationPending以查看它是否已设置为 true

注意

请注意,事件处理程序中的 DoWork 代码可能会在发出取消请求时完成其工作,并且轮询循环可能会错过 CancellationPending 设置为 true。 在这种情况下,即使发出了取消请求,Cancelled事件处理程序中的 RunWorkerCompleted 标志System.ComponentModel.RunWorkerCompletedEventArgs也不会设置为 true。 这种情况称为 争用条件 ,是多线程编程中常见的问题。 有关多线程设计问题的详细信息,请参阅 托管线程处理最佳做法

适用于

另请参阅