BackgroundWorker.RunWorkerCompleted Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt ein, wenn der Hintergrundvorgang entweder abgeschlossen ist, abgebrochen wurde oder eine Ausnahme ausgelöst hat.
public:
event System::ComponentModel::RunWorkerCompletedEventHandler ^ RunWorkerCompleted;
public event System.ComponentModel.RunWorkerCompletedEventHandler RunWorkerCompleted;
public event System.ComponentModel.RunWorkerCompletedEventHandler? RunWorkerCompleted;
member this.RunWorkerCompleted : System.ComponentModel.RunWorkerCompletedEventHandler
Public Custom Event RunWorkerCompleted As RunWorkerCompletedEventHandler
Ereignistyp
Beispiele
Im folgenden Codebeispiel wird die Verwendung des Ereignisses zum Behandeln des RunWorkerCompleted Ergebnisses eines asynchronen Vorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die BackgroundWorker Klasse bereitgestellt wird.
// This event handler deals with the results of the
// background operation.
void backgroundWorker1_RunWorkerCompleted( Object^ /*sender*/, RunWorkerCompletedEventArgs^ e )
{
// First, handle the case where an exception was thrown.
if ( e->Error != nullptr )
{
MessageBox::Show( e->Error->Message );
}
else
if ( e->Cancelled )
{
// Next, handle the case where the user cancelled
// the operation.
// Note that due to a race condition in
// the DoWork event handler, the Cancelled
// flag may not have been set, even though
// CancelAsync was called.
resultLabel->Text = "Cancelled";
}
else
{
// Finally, handle the case where the operation
// succeeded.
resultLabel->Text = e->Result->ToString();
}
// Enable the UpDown control.
this->numericUpDown1->Enabled = true;
// Enable the Start button.
startAsyncButton->Enabled = true;
// Disable the Cancel button.
cancelAsyncButton->Enabled = false;
}
// This event handler deals with the results of the
// background operation.
private void backgroundWorker1_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
// First, handle the case where an exception was thrown.
if (e.Error != null)
{
MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
// Next, handle the case where the user canceled
// the operation.
// Note that due to a race condition in
// the DoWork event handler, the Cancelled
// flag may not have been set, even though
// CancelAsync was called.
resultLabel.Text = "Canceled";
}
else
{
// Finally, handle the case where the operation
// succeeded.
resultLabel.Text = e.Result.ToString();
}
// Enable the UpDown control.
this.numericUpDown1.Enabled = true;
// Enable the Start button.
startAsyncButton.Enabled = true;
// Disable the Cancel button.
cancelAsyncButton.Enabled = false;
}
' This event handler deals with the results of the
' background operation.
Private Sub backgroundWorker1_RunWorkerCompleted( _
ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) _
Handles backgroundWorker1.RunWorkerCompleted
' First, handle the case where an exception was thrown.
If (e.Error IsNot Nothing) Then
MessageBox.Show(e.Error.Message)
ElseIf e.Cancelled Then
' Next, handle the case where the user canceled the
' operation.
' Note that due to a race condition in
' the DoWork event handler, the Cancelled
' flag may not have been set, even though
' CancelAsync was called.
resultLabel.Text = "Canceled"
Else
' Finally, handle the case where the operation succeeded.
resultLabel.Text = e.Result.ToString()
End If
' Enable the UpDown control.
Me.numericUpDown1.Enabled = True
' Enable the Start button.
startAsyncButton.Enabled = True
' Disable the Cancel button.
cancelAsyncButton.Enabled = False
End Sub
Hinweise
Dieses Ereignis wird ausgelöst, wenn der DoWork Ereignishandler zurückgibt.
Wenn der Vorgang erfolgreich abgeschlossen ist und dessen Ergebnis im DoWork Ereignishandler zugewiesen wird, können Sie über die RunWorkerCompletedEventArgs.Result Eigenschaft auf das Ergebnis zugreifen.
Die Error Eigenschaft gibt System.ComponentModel.RunWorkerCompletedEventArgs an, dass eine Ausnahme vom Vorgang ausgelöst wurde.
Die Cancelled Eigenschaft des System.ComponentModel.RunWorkerCompletedEventArgs Objekts gibt an, ob eine Abbruchanforderung vom Hintergrundvorgang verarbeitet wurde. Wenn Ihr Code im DoWork Ereignishandler eine Abbruchanforderung erkennt, indem Sie das CancellationPending Kennzeichen überprüfen und das Cancel Kennzeichen System.ComponentModel.DoWorkEventArgs trueauf festlegen, wird auch das Cancelled Kennzeichen System.ComponentModel.RunWorkerCompletedEventArgs auf festgelegt true.
Achtung
Beachten Sie, dass Ihr Code im DoWork Ereignishandler seine Arbeit möglicherweise beendet, wenn eine Abbruchanforderung vorgenommen wird, und Ihre Abfrageschleife kann nicht CancellationPending auf truefestgelegt werden. In diesem Fall wird das Cancelled Kennzeichen des System.ComponentModel.RunWorkerCompletedEventArgs RunWorkerCompleted Ereignishandlers nicht auf festgelegt true, auch wenn eine Abbruchanforderung vorgenommen wurde. Diese Situation wird als Rassebedingung bezeichnet und ist ein gemeinsames Anliegen bei der Multithread-Programmierung. Weitere Informationen zu Designproblemen mit Multithreading finden Sie unter Bewährte Methoden für verwaltete Threadings.
Der RunWorkerCompleted Ereignishandler sollte die AsyncCompletedEventArgs.Error AsyncCompletedEventArgs.Cancelled Eigenschaften immer überprüfen, bevor sie auf die RunWorkerCompletedEventArgs.Result Eigenschaft zugreifen. Wenn eine Ausnahme ausgelöst wurde oder der Vorgang abgebrochen wurde, löst der Zugriff auf die RunWorkerCompletedEventArgs.Result Eigenschaft eine Ausnahme aus.