BackgroundWorker.CancelAsync Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Запрашивает отмену отложенной фоновой операции.
public:
void CancelAsync();
public void CancelAsync ();
member this.CancelAsync : unit -> unit
Public Sub CancelAsync ()
Исключения
WorkerSupportsCancellation имеет значение false
.
Примеры
В следующем примере кода показано использование CancelAsync метода для отмены асинхронной (фоновой) операции. Этот пример входит в состав более крупного примера использования класса 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 флаг System.ComponentModel.RunWorkerCompletedEventArgs в RunWorkerCompleted обработчике событий не будет иметь значение true
, даже если был сделан запрос на отмену. Эта ситуация называется состоянием гонки и является общей проблемой в многопотоковом программировании. Дополнительные сведения о проблемах многопоточности см. в статье Рекомендации по использованию управляемых потоков.