BackgroundWorker.RunWorkerCompleted Événement

Définition

Se produit lorsque l'opération d'arrière-plan est terminée, a été annulée ou a levé une exception.

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 

Type d'événement

RunWorkerCompletedEventHandler

Exemples

L’exemple de code suivant illustre l’utilisation de l' RunWorkerCompleted événement pour gérer le résultat d’une opération asynchrone. Cet exemple de code fait partie d’un exemple plus complet fourni pour la BackgroundWorker classe.

// 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

Remarques

Cet événement est déclenché lorsque le DoWork Gestionnaire d’événements retourne.

Si l’opération se termine correctement et que son résultat est affecté dans le DoWork Gestionnaire d’événements, vous pouvez accéder au résultat via la RunWorkerCompletedEventArgs.Result propriété.

La Error propriété de System.ComponentModel.RunWorkerCompletedEventArgs indique qu’une exception a été levée par l’opération.

La Cancelled propriété de System.ComponentModel.RunWorkerCompletedEventArgs indique si une demande d’annulation a été traitée par l’opération d’arrière-plan. Si votre code dans le DoWork Gestionnaire d’événements détecte une demande d’annulation en activant l’indicateur CancellationPending et en affectant à l’indicateur la valeur Cancel System.ComponentModel.DoWorkEventArgs true , l' Cancelled indicateur de System.ComponentModel.RunWorkerCompletedEventArgs est également défini sur true .

Attention

N’oubliez pas que votre code dans le DoWork Gestionnaire d’événements peut finir son travail lorsqu’une demande d’annulation est en cours, et que votre boucle d’interrogation peut ne pas avoir la CancellationPending valeur true . Dans ce cas, l' Cancelled indicateur de System.ComponentModel.RunWorkerCompletedEventArgs dans votre RunWorkerCompleted Gestionnaire d’événements ne sera pas défini sur true , même si une demande d’annulation a été effectuée. Cette situation est appelée « condition de concurrence » et est un problème courant dans la programmation multithread. Pour plus d’informations sur les problèmes de conception de multithreads, consultez meilleures pratiques pour le threading managé.

Votre RunWorkerCompleted Gestionnaire d’événements doit toujours vérifier AsyncCompletedEventArgs.Error les AsyncCompletedEventArgs.Cancelled Propriétés et avant d’accéder à la RunWorkerCompletedEventArgs.Result propriété. Si une exception a été levée ou si l’opération a été annulée, l’accès à la RunWorkerCompletedEventArgs.Result propriété lève une exception.

S’applique à

Voir aussi