Quelle est la différence entre BackgroundWorker
et Thread
? Dans mon application, je suis en utilisant un système de messagerie qui communique avec la base de données régulièrement. Lequel devrais-je utiliser ici: BackgroundWorker
ou Thread
?
OriginalL'auteur Nighil | 2011-01-21
Un BackgroundWorker agit d'un prêt à utiliser la classe en WinForms vous permettant d'exécuter des tâches sur les threads d'arrière-plan qui évite le gel de l'INTERFACE utilisateur et en plus cela vous permet de facilement maréchal de l'exécution de la réussite de rappel sur le thread principal qui vous donne la possibilité de mettre à jour l'interface utilisateur avec les résultats. Il donne aussi la possibilité de suivre les progrès et d'annuler la tâche. Il utilise des threads du pool de threads.
D'autre part, une Fil est une classe vous permettant de simplement exécuter une tâche sur un nouveau fil. C'est beaucoup plus le concept de base.
OriginalL'auteur Darin Dimitrov
Tandis que le
BackgroundWorker
de la classe n'est pas dérivée de laThread
classe il vous permet de gérer le travail d'un fil beaucoup plus facilement que si vous avez créé et a invoqué le thread de vous-même.Il soulève trois événements majeurs:
DoWork
- soulevées lors de la discussion commence.ProgressChanged
- soulevé de faire rapport au principal, le thread de l'INTERFACE utilisateur.RunWorkerCompleted
élevés lorsque le thread se termine.Avec eux, vous pouvez surveiller le travail du fil fait après l'appel de
RunWorkerAsync()
pour le démarrer.vous avez raison. J'ai utilisé le mauvais terme. Je vais mettre à jour la réponse.
OriginalL'auteur ChrisF
Le BackgroundWorker utilise des threads du pool de threads, avec Fil, vous créer votre propre sujet. En outre, il ya une certaine facilité en terme de signalement des événements pour le thread appelant.
OriginalL'auteur Felice Pollano
Un BackgroundWorker est un fil de mise en œuvre qui permet d'attribuer attribuer une méthode à faire.
Il vous donne une API qui vous permet d'arrêter le travail, suivre les progrès, et être averti en mode Asynchrone.
OriginalL'auteur Yochai Timmer
Utilisation BackgroundWorker - il de toute façon encapsule fil et est plus simple de travailler avec. L'un des avantage avec elle, c'est que son api permet plus simple événement de base du modèle à rendre compte des progrès et de plus, ces événements les appels sont correctement acheminés vers thread d'INTERFACE utilisateur (de sorte que vous n'avez pas à le faire maréchal de l'appel à l'aide de la méthode Invoke).
OriginalL'auteur VinayC
BackgroundWorker a déjà mis en place des fonctionnalités de reporting d'avancement, d'achèvement et d'annulation, vous n'avez donc pas besoin de le mettre en œuvre par vous-même.
L'utilisation de Fil vous donne plus de contrôle sur la async d'exécution des processus (par exemple, la priorité de thread ou le choix entre avant-plan/arrière-plan type de filetage).
BTW parfois, vous n'avez pas besoin de rapports sur les progrès réalisés et d'autres BackgroundWorker trucs - Fil/ThreadPool va être une bonne alternative.
OriginalL'auteur Sergey Berezovskiy
Je pense qu'il y est une grosse différence, c'est Quand vous voulez utiliser un composant de l'INTERFACE utilisateur dans les méthodes appelées par le BackgroundWorker, il ne fonctionne pas du tout. Je veux dire BackgroundWorker est un processus d'arrière-plan vraiment, vous ne serez pas en mesure d'utiliser l'interface actions. Par exemple, si vous créez une nouvelle étiquette dans la méthode va à l'appel en composant BackgroundWorker, vous attrapez une erreur certainement.
OriginalL'auteur D.Farzaneh