Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Il existe de nombreuses opérations couramment effectuées qui peuvent prendre beaucoup de temps pour s’exécuter. Par exemple:
Téléchargements d’images
Appels de service web
Téléchargements et chargements de fichiers (y compris pour les applications pair à pair)
Calculs locaux complexes
Transactions de base de données
Accès au disque local, compte tenu de sa vitesse lente par rapport à l’accès à la mémoire
Les opérations comme celles-ci peuvent entraîner le blocage de votre interface utilisateur pendant leur exécution. Lorsque vous souhaitez une interface utilisateur réactive et que vous êtes confronté à de longs retards associés à ces opérations, le composant BackgroundWorker fournit une solution pratique.
Le composant BackgroundWorker vous donne la possibilité d’exécuter des opérations fastidieuses de manière asynchrone (« en arrière-plan »), sur un thread différent du thread principal de l’interface utilisateur de votre application. Pour utiliser un BackgroundWorker, vous lui indiquez simplement quelle méthode de travail de longue durée exécuter en arrière-plan, puis vous appelez la méthode RunWorkerAsync. Votre thread d'appel continue de s'exécuter normalement pendant que la méthode de travail s'exécute de façon asynchrone. Une fois la méthode terminée, l'BackgroundWorker avertit le thread appelant en mettant fin à l’événement RunWorkerCompleted, qui contient éventuellement les résultats de l’opération.
Le composant BackgroundWorker est disponible à partir de la boîte à outils , sous l’onglet Composants . Pour ajouter un BackgroundWorker à votre formulaire, faites glisser le composant BackgroundWorker sur votre formulaire. Il apparaît dans la barre d’état du composant et ses propriétés apparaissent dans la fenêtre propriétés
Pour démarrer votre opération asynchrone, utilisez la méthode RunWorkerAsync.
RunWorkerAsync prend un paramètre object facultatif, qui peut être utilisé pour passer des arguments à votre méthode de travail. La classe BackgroundWorker expose l’événement DoWork auquel votre thread de travail est attaché via un gestionnaire d’événements DoWork.
Le gestionnaire d’événements DoWork prend un paramètre DoWorkEventArgs, qui a une propriété Argument. Cette propriété reçoit le paramètre de RunWorkerAsync et peut être transmise à votre méthode worker, qui sera appelée dans le gestionnaire d’événements DoWork. L’exemple suivant montre comment affecter un résultat à partir d’une méthode worker appelée ComputeFibonacci. Il fait partie d’un exemple plus large, que vous pouvez trouver à Comment : implémenter un formulaire qui utilise une opération en arrière-plan.
// 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
Pour plus d’informations sur l’utilisation de gestionnaires d’événements, consultez Événements.
Avertissement
Lorsque vous utilisez le multithreading de n’importe quelle sorte, vous vous exposez potentiellement à des bogues très graves et complexes. Consultez les meilleures pratiques Managed Threading avant d’implémenter une solution qui utilise la multithreading.
Pour plus d’informations sur l’utilisation de la classe BackgroundWorker, consultez Comment : Exécuter une opération en arrière-plan.
Voir aussi
- Threading managé
- Vue d’ensemble du modèle asynchrone basé sur les événements
- Comment : implémenter un formulaire qui utilise une opération en arrière-plan
.NET Desktop feedback