Meilleure façon de filet rapport de progrès

J'ai un programme qui utilise des threads pour effectuer de longs processus de manière séquentielle. Je veux être en mesure de suivre les progrès de chaque thread similaire à la façon dont le BackgroundWorker.ReportProgress/ProgressChanged modèle ne. Je ne peux pas utiliser ThreadPool ou BackgroundWorker en raison d'autres contraintes, je suis sous. Quel est le meilleur moyen pour permettre/exposer cette fonctionnalité. La surcharge de la Thread classe et ajouter une propriété/événement? Une autre plus-solution élégante?

  • Comment êtes-vous créer les threads?
  • Steve Townsend - je avoir une usine qui crée tous à l'avance et d'une machine à état qui contrôle le moment où ils sont exécutés.
  • Quelles sont les contraintes? Pouvez-vous créer une classe à enrouler un Fil et de l'utilisation de cette classe? C'est l'Objet Actif motif.
  • Henry - Merci pour le modèle de conception de nom, je suis encore à apprendre/nouveau pour eux. Les contraintes sont que j'ai besoin d'être en mesure de s'assurer que certains threads s'exécutent concurremment & certains fils sont exécutées de manière séquentielle (par rapport à d'autres) en fonction du type de leur tâche et de l'information supplémentaire fournie (essentiellement d'une matrice de threads). Je pense que la classe wrapper est ma meilleure option, mais peut-être plusieurs BackgoundWorkers n'autorisant qu'un seul élément de travail pourrait également être une option.
  • Utiliser un autre composant BackgroundWorker pour chaque fil que vous souhaitez exécuter simultanément. L'utilisation d'un seul composant BackgroundWorker pour les travaux que vous souhaitez exécuter en séquence. En fait, dans la WorkCompleted handler, vous pouvez mettre en place la prochaine BackgroundWorker pour s'exécuter. Aussi, si vous êtes en utilisant .NET 4 regarder le Système.Le filetage.Les tâches de l'espace de noms.
InformationsquelleAutor Joel B | 2010-10-06