BackgroundWorker.RunWorkerCompleted Ereignis

Definition

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 RunWorkerCompleted zum Behandeln des 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 wurde und das Ergebnis im DoWork Ereignishandler zugewiesen ist, können Sie über die -Eigenschaft auf das RunWorkerCompletedEventArgs.Result Ergebnis zugreifen.

Die Error -Eigenschaft von System.ComponentModel.RunWorkerCompletedEventArgs gibt an, dass durch den Vorgang eine Ausnahme ausgelöst wurde.

Die Cancelled -Eigenschaft von System.ComponentModel.RunWorkerCompletedEventArgs gibt an, ob eine Abbruchanforderung vom Hintergrundvorgang verarbeitet wurde. Wenn Ihr Code im DoWork Ereignishandler eine Abbruchanforderung erkennt, indem das CancellationPending Flag überprüft und das Cancel Flag von System.ComponentModel.DoWorkEventArgs auf truefestgelegt wird, wird auch das Cancelled Flag von System.ComponentModel.RunWorkerCompletedEventArgs auf truefestgelegt.

Achtung

Beachten Sie, dass Ihr Code im DoWork Ereignishandler möglicherweise seine Arbeit beendet, wenn eine Abbruchanforderung ausgeführt wird, und ihre Abrufschleife möglicherweise nicht CancellationPending auf truefestgelegt wird. In diesem Fall wird das Cancelled Flag von System.ComponentModel.RunWorkerCompletedEventArgs in Ihrem RunWorkerCompleted Ereignishandler nicht auf truefestgelegt, auch wenn eine Abbruchanforderung gestellt wurde. Diese Situation wird als Racebedingung bezeichnet und ist ein häufiges Anliegen in der Multithreadprogrammierung. Weitere Informationen zu Problemen mit dem Multithreading-Entwurf finden Sie unter Bewährte Methoden für verwaltetes Threading.

Ihr RunWorkerCompleted Ereignishandler sollte immer die AsyncCompletedEventArgs.Error Eigenschaften und AsyncCompletedEventArgs.Cancelled überprüfen, bevor auf die RunWorkerCompletedEventArgs.Result Eigenschaft zugegriffen wird. Wenn eine Ausnahme ausgelöst wurde oder der Vorgang abgebrochen wurde, löst der Zugriff auf die RunWorkerCompletedEventArgs.Result -Eigenschaft eine Ausnahme aus.

Gilt für:

Weitere Informationen