BackgroundWorker.DoWork Événement

Définition

Se produit lorsque RunWorkerAsync() est appelée.

public:
 event System::ComponentModel::DoWorkEventHandler ^ DoWork;
public event System.ComponentModel.DoWorkEventHandler DoWork;
public event System.ComponentModel.DoWorkEventHandler? DoWork;
member this.DoWork : System.ComponentModel.DoWorkEventHandler 
Public Custom Event DoWork As DoWorkEventHandler 

Type d'événement

Exemples

L’exemple de code suivant illustre l’utilisation de l’événement DoWork pour démarrer une opération asynchrone. Cet exemple de code fait partie d’un exemple plus grand fourni pour la BackgroundWorker classe .

// This event handler is where the actual,
// potentially time-consuming work is done.
void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
   // Get the BackgroundWorker that raised this event.
   BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);

   // Assign the result of the computation
   // to the Result property of the DoWorkEventArgs
   // object. This is will be available to the 
   // RunWorkerCompleted eventhandler.
   e->Result = ComputeFibonacci( safe_cast<Int32>(e->Argument), worker, e );
}
// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender, 
    DoWorkEventArgs e)
{   
    // Get the BackgroundWorker that raised this event.
    BackgroundWorker worker = sender as BackgroundWorker;

    // Assign the result of the computation
    // to the Result property of the DoWorkEventArgs
    // object. This is will be available to the 
    // RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}
' This event handler is where the actual work is done.
Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork

    ' Get the BackgroundWorker object that raised this event.
    Dim worker As BackgroundWorker = _
        CType(sender, BackgroundWorker)

    ' Assign the result of the computation
    ' to the Result property of the DoWorkEventArgs
    ' object. This is will be available to the 
    ' RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci(e.Argument, worker, e)
End Sub

Remarques

Cet événement est déclenché lorsque vous appelez la RunWorkerAsync méthode . C’est là que vous démarrez l’opération qui effectue le travail potentiellement fastidieux.

Votre code dans le DoWork gestionnaire d’événements doit régulièrement case activée la valeur de la CancellationPending propriété et abandonner l’opération s’il s’agit truede . Dans ce cas, vous pouvez définir l’indicateur Cancel de System.ComponentModel.DoWorkEventArgs sur true, et l’indicateur Cancelled de System.ComponentModel.RunWorkerCompletedEventArgs dans votre RunWorkerCompleted gestionnaire d’événements est défini sur true.

Attention

N’oubliez pas que votre code dans le DoWork gestionnaire d’événements peut terminer son travail à mesure qu’une demande d’annulation est en cours d’exécution, et que votre boucle d’interrogation peut ne pas être CancellationPending définie sur true. Dans ce cas, l’indicateur Cancelled de dans votre RunWorkerCompleted gestionnaire d’événements System.ComponentModel.RunWorkerCompletedEventArgs n’est pas défini sur true, même si une demande d’annulation a été effectuée. Cette situation est appelée une condition de concurrence et est une préoccupation commune dans la programmation multithread. Pour plus d’informations sur les problèmes de conception multithreading, consultez Bonnes pratiques en matière de threads managés.

Si votre opération produit un résultat, vous pouvez affecter le résultat à la DoWorkEventArgs.Result propriété . Ce sera disponible pour le gestionnaire d’événements RunWorkerCompleted dans la RunWorkerCompletedEventArgs.Result propriété .

Si l’opération déclenche une exception que votre code ne gère pas, intercepte BackgroundWorker l’exception et la transmet au RunWorkerCompleted gestionnaire d’événements, où elle est exposée en tant que Error propriété de System.ComponentModel.RunWorkerCompletedEventArgs. Si vous exécutez sous le débogueur Visual Studio, le débogueur s’arrête au point dans le DoWork gestionnaire d’événements où l’exception non gérée a été déclenchée. Si vous avez plusieurs BackgroundWorker, vous ne devez référencer aucun d’entre eux directement, car cela associerait votre DoWork gestionnaire d’événements à un instance spécifique de BackgroundWorker. Au lieu de cela, vous devez accéder à votre BackgroundWorker en castant le sender paramètre dans votre DoWork gestionnaire d’événements.

Vous devez veiller à ne pas manipuler d’objets d’interface utilisateur dans votre DoWork gestionnaire d’événements. Au lieu de cela, communiquez avec l’interface utilisateur via les BackgroundWorker événements.

Pour plus d’informations sur la façon de gérer les événements, consultez gestion et déclenchement d’événements.

S’applique à

Voir aussi