A propos du meilleur document de filetage que j'ai jamais trouvé était ce http://www.albahari.com/threading/
Si je peux me permettre, le problème avec des exemples simples est qu'ils sont souvent trop simples. Une fois que vous avez passé le comptage ou le tri dans les démos en arrière-plan, vous devez généralement mettre à jour l'interface utilisateur ou similaire et il y a quelques pièges. De même, il est rare que vous ayez à traiter des conflits de ressources dans des exemples simples et que la dégradation des threads lorsqu'une ressource n'est pas disponible (comme une connexion Db) nécessite une réflexion.
D'un point de vue conceptuel, vous devez décider comment vous allez répartir votre travail entre les threads et combien vous voulez. Il y a un surcoût associé à la gestion des threads et certains mécanismes utilisent un pool de threads partagé qui pourrait être lui-même sujet à des conflits de ressources (par exemple, chaque fois que vous lancez un programme qui affiche simplement un formulaire vide). Par conséquent, dans votre cas, les threads qui effectuent le téléchargement réel doivent signaler s'ils ont terminé, s'ils ont échoué (et quel a été l'échec). Le contrôleur doit être capable de gérer ces processus et de gérer les processus de démarrage/arrêt et ainsi de suite. Enfin (presque), en supposant que faire quelque chose de multithread augmentera les performances ne reste pas toujours vrai. Si, par exemple, vous découpez un fichier en segments, mais qu'il doit traverser une liaison à basse vitesse (ADSL, par exemple), vous êtes contraint par des forces externes et aucune quantité de trucage de thread ne va contourner cela.La même chose peut s'appliquer pour les mises à jour de bases de données, les requêtes Web, tout ce qui peut impliquer de grandes quantités d'E/S de disque, etc. En dépit de tout cela, je ne suis pas le prophète de la fatalité. Les références ici sont plus que suffisantes pour vous aider à réaliser ce que vous voulez mais sachez que l'une des raisons pour lesquelles le thread semble compliqué est parce que cela peut être :)
Si vous voulez plus de contrôle que BackgroundWorker/Threadpool mais pas veulent tout faire vous-même, il y a au moins deux très bonnes bibliothèques de filetage de billet de faveur cognement autour de la place (Wintellect & PowerThreading)
Vive
Simon
Je l'ai utilisé avec succès le composant BackgroundWorker dans quelques VB Projets .NET. Il est difficile de battre si vos besoins en multi-threading sont assez simples. –
Merci pour la mise à jour !! – Taptronic