2010-07-04 7 views
2

En termes simples, quelle est la meilleure façon d'envoyer la progression d'un processus à un formulaire à partir d'une classe en dehors de la portée du formulaire? EG: J'ai un objet Entrée, un chemin de fichier est envoyé dans le constructeur de cet objet et il analyse le fichier. Je veux montrer la progression de la lecture dans les lignes de ce fichier à l'utilisateur qui est dans un formulaire en dehors de la portée de la méthode en cours d'exécution. En fin de compte, je vais afficher les progrès globaux et les progrès du fichier.Barre de progression C# dans une classe?

Répondre

2

La meilleure approche ici serait un BackgroundWorker. Il a un événement specifique ReportProgress (qui gère la logique Invoke pour vous).

C'est un moyen facile de faire du multi-threading. Suivez un good example lors de l'implémentation de l'événement RunWorkerCompleted.

+0

Très simple à mettre en œuvre, bon! – Mohgeroth

3

Ajoutez un événement à votre cours auquel le formulaire peut s'abonner. UpdateProgress ou quelque chose comme ça. Votre classe augmenterait alors l'événement de temps en temps pour laisser le formulaire afficher la progression.

+1

Pour ajouter à cette réponse: cela ne fonctionnera que si votre traitement est dans un thread séparé, et le thread de l'interface utilisateur continue à s'exécuter (afin de mettre à jour la barre de progression). Vous devez également appeler Invoke() lors de la mise à jour de la barre de progression car le gestionnaire d'événements sera appelé dans le thread de traitement, pas le thread de l'interface utilisateur. Voir aussi: BackgroundWorker. –

+0

@Jason merci. Je n'ai pas pensé à le mentionner. – spinon

+0

à proprement parler, vous pouvez appeler Application.DoEvents() dans votre gestionnaire d'événements. Mais je ne recommanderais pas cela, l'OP a besoin d'un fil. –