Quelle est la meilleure façon de mettre à jour les contrôles de formulaire à partir d'un thread de travail?
J'ai fait quelques recherches et je ne peux pas vraiment trouver un moyen privilégié pour faire la mise à jour des contrôles de formulaire à partir d'un thread en C#. Je sais que sur le composant BackgroundWorker, mais quelle est la meilleure façon de le faire sans utiliser le composant BackgroundWorker?
Vous devez vous connecter pour publier un commentaire.
Il y a une règle générale qui dit de ne pas mettre à jour l'INTERFACE utilisateur à partir d'un thread autre que le thread d'INTERFACE utilisateur lui-même. En utilisant les fonctionnalités du BackgroundWorker est une bonne idée, mais vous ne voulez pas et il se passe quelque chose sur un thread différent, vous devez faire un "Appeler" ou BeginInvoke pour forcer le délégué à l'exécution de la méthode sur le thread d'INTERFACE utilisateur.
Edit: Jon B fait ce bon point dans les commentaires:
Un simple exemple de code:
Le code ci-dessus est d'une FAQ à ce sujet ici et de plus en plus impliqués à un ici.
Pourquoi ne pas vous voulez faire en utilisant le composant BackgroundWorker? Il dispose d'un fantastique événement de rappel appelée ProgressChanged qui permet au thread de l'INTERFACE utilisateur de savoir à propos de mises à jour, parfait pour la barre de progression-type de mises à jour et la comme.
un lien pour les détails
Il y a une discussion au sujet de cette ici et un ici.
Essentiellement, vous utilisez Invoquer pour l'accomplir.
Bonne chance!
Je voudrais également envisager d'InvokeRequired (VS2008 uniquement) lors de l'appel de l'Invoquer. Il ya des moments que vous ne serez pas la mise à jour de l'INTERFACE utilisateur à partir d'un sujet séparé. Cela permet d'économiser les frais généraux de la création du délégué etc.