Teilen über


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 veranschaulicht, um das Ergebnis eines asynchronen Vorgangs zu behandeln. 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 sein DoWork Ergebnis im Ereignishandler zugewiesen wird, können Sie über die -Eigenschaft auf das RunWorkerCompletedEventArgs.Result Ergebnis zugreifen.

Die Error -Eigenschaft von System.ComponentModel.RunWorkerCompletedEventArgs gibt an, dass vom 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 gestellt wird, und ihre Abfrageschleife 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, obwohl eine Abbruchanforderung gestellt wurde. Diese Situation wird als Racebedingung bezeichnet und ist ein häufiges Problem bei der Multithreadprogrammierung. Weitere Informationen zu Multithreadingentwurfsproblemen finden Sie unter Best Practices für verwaltetes Threading.

Ihr RunWorkerCompleted Ereignishandler sollte immer die AsyncCompletedEventArgs.Error Eigenschaften und AsyncCompletedEventArgs.Cancelled ü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.

Gilt für:

Weitere Informationen