2009-12-28 18 views

Répondre

6

Le rappel RunWorkerCompleted est placé sur le thread d'interface utilisateur; DoWork ne l'est pas. Vous devez utiliser la méthode ReportProgress pour mettre à jour l'interface utilisateur au cours du traitement DoWork.

Voir: How to: Run an Operation in the Background

3

Vous vous trompez, vous ne pouvez pas appeler le thread d'interface utilisateur directement à partir du gestionnaire pour la méthode DoWork, car cela est sur le fil d'arrière-plan.

Si vous souhaitez mettre à jour l'interface utilisateur, vous devez appeler la méthode ReportProgress, puis mettre à jour l'interface utilisateur à partir du gestionnaire d'événements pour l'événement ProgressChanged.

Bien que vous puissiez appeler la méthode Invoke dans le thread d'arrière-plan, cela annule le but de l'utilisation de la classe BackgroundWorker. L'événement ProgressChanged est lancé sur le thread d'interface utilisateur et est le mécanisme que vous devez utiliser pour mettre à jour les composants de l'interface utilisateur lorsque quelque chose change sur le thread d'arrière-plan.

1

Gardez à l'esprit que si vous appelez RunWorkerAsync() à partir de fils non de l'interface utilisateur, vous devrez appeler Invoke des gestionnaires d'événements ProgressChanged et RunWorkerCompleted.