BackgroundWorker RunWorkerCompleted, événement

Mon application C # a plusieurs antécédents. Parfois, un ouvrier de fond en tire un autre. Lorsque le premier agent d’arrière-plan est terminé et que l’événement RunWorkerCompleted est déclenché, sur quel thread cet événement est-il déclenché, l’interface utilisateur ou le premier agent d’arrière-plan à partir duquel RunWorkerAsync été appelé? J’utilise Microsoft Visual C # 2008 Express Edition. Toutes les pensées ou suggestions que vous pourriez avoir seraient appréciées. Merci.

Si BackgroundWorker été créé à partir du thread d’interface utilisateur, l’événement RunWorkerCompleted sera également RunWorkerCompleted sur le thread d’interface utilisateur.

S’il a été créé à partir d’un thread en arrière-plan, l’événement sera déclenché sur un thread en arrière-plan non défini (pas nécessairement le même thread, à moins que vous n’utilisiez un SynchronizationContext personnalisé).

Fait intéressant, cela ne semble pas être aussi bien documenté sur MSDN. La meilleure référence que j’ai pu trouver était ici :

La méthode recommandée pour implémenter le multithreading dans votre application consiste à utiliser le composant BackgroundWorker . Le composant BackgroundWorker utilise un modèle multithreading piloté par événement. Le fil d’arrière-plan exécute votre gestionnaire d’ événements DoWork et le fil qui crée vos contrôles exécute vos gestionnaires d’événements ProgressChanged et RunWorkerCompleted . Vous pouvez appeler vos contrôles à partir de vos gestionnaires d’événements ProgressChanged et RunWorkerCompleted .