BackgroundWorker.DoWork Événement
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Se produit lorsqu’il RunWorkerAsync() est appelé.
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.
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 vérifier régulièrement 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 sur true, et l’indicateur Cancelled de System.ComponentModel.RunWorkerCompletedEventArgs votre RunWorkerCompleted gestionnaire d’événements est défini sur true.System.ComponentModel.DoWorkEventArgsCancel
Avertissement
N’oubliez pas que votre code dans le DoWork gestionnaire d’événements peut terminer son travail en tant que demande d’annulation en cours d’exécution, et que votre boucle d’interrogation peut manquer CancellationPending d’être définie truesur . Dans ce cas, l’indicateur Cancelled de votre RunWorkerCompleted gestionnaire d’événements System.ComponentModel.RunWorkerCompletedEventArgs n’est pas défini truesur , 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 Les 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 RunWorkerCompleted gestionnaire d’événements dans la RunWorkerCompletedEventArgs.Result propriété.
Si l’opération déclenche une exception que votre code ne gère pas, l’intercepte BackgroundWorker et la transmet dans le 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 avez plusieurs BackgroundWorker, vous ne devez pas référencer directement l’un d’eux, car cela couplerait votre DoWork gestionnaire d’événements à une instance spécifique de BackgroundWorker. Au lieu de cela, vous devez accéder à vous BackgroundWorker en castant le sender paramètre dans votre DoWork gestionnaire d’événements.
Vous devez être prudent de 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 gestion des événements, consultez Gestion et déclenchement d’événements.