Partage via


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 si elle est true. Lorsque cela se produit, vous pouvez définir l’indicateur de sur , et l’indicateur Cancelled de dans votre RunWorkerCompleted gestionnaire d’événements System.ComponentModel.RunWorkerCompletedEventArgs sera défini sur true.trueSystem.ComponentModel.DoWorkEventArgsCancel

Attention

N’oubliez pas que votre code dans le DoWork gestionnaire d’événements peut terminer son travail lorsqu’une demande d’annulation est effectuée et que votre boucle d’interrogation peut manquer CancellationPending d’être 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 condition raciale et est une préoccupation courante dans la programmation multithread. Pour plus d’informations sur les problèmes de conception multithreading, consultez Meilleures 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é . Cela 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, le BackgroundWorker intercepte 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é levée. Si vous en avez plusieurs BackgroundWorker, vous ne devez référencer aucun d’entre eux directement, car cela couplerait 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