Bonjour à tous,
Quelqu'un aurait une idée de comment avec un progressBar on peut montrer l'evolution d'une tache asynchrone(ThreadPool ou thread simple) en C# ?
Merci de m'aider.
Bonjour à tous,
Quelqu'un aurait une idée de comment avec un progressBar on peut montrer l'evolution d'une tache asynchrone(ThreadPool ou thread simple) en C# ?
Merci de m'aider.
Bonjour,
Je vais te donner une solution que j'utiliserais, mais il y a surement une meilleur solution :
Dans ton Thread qui traite ta tâche asynchrone, tu déclare un évènement et un délégate :
Puis durant le processus du thread, tu lances l'évènement pour indiquer une progression :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public delegate void onEventHandler(object sender, int increment); public event onEventHandler OnStateChanged;
Puis dans ton programme tu crées ton thread asynchrone et tu écoute l'évènement OnStateChanged :
Code : Sélectionner tout - Visualiser dans une fenêtre à part OnStateChanged(this,1)
Et tu déclare le délégate dans ton programme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 TonThread.OnStateChanged += new TonThread.onEventHandler(fonctiongerantlevenement); private void fonctiongerantlevenement(object sender, int increment) { this.invoke(new StateChange(change),increment); } private void change(int incr) { taProgressBar.Value+=incr; }
Voilà, j'espère que quelqu'un te postera une réponse plus simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part private delegate void StateChange(int i);
Cordialement.
Bonjour,
pour compléter la réponse précédente, la classe BackgroundWorker permet de gérer des actions background très simplement, et implémente déjà tout le code proposé par neoprime1988.
Il suffit de
- mettre la propriété WorkerReportsProgress à True
- d'implémenter le corps de la méthode suivante ( dans cette méthode, la progressbar est modifiée avec l'argument evt.ProgressPercentage) :
- Définir "OnReportProgress" comme méthode à passer à l'évènement ProgressChanged
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 private void OnReportProgress(object sender, ProgressChangedEventArgs evt)
- Appeler à plusieurs reprises dans le code background l'évènenemt ReportProgress.
slt,
je m'excuse de ne pas avoir donner suite à la discussion plus tôt (débordé par le boulot).
bref, j'ai procédé par la l'approche backgroundWorker de thelpi qui semble la plus simple.
ce que j'essaie de faire c'est juste une une boucle de 1 à 10 000 et voir son évolution via un Progressbar pour tester.
ce que j'arrive pas à bien cerner c'est:
- Appeler à plusieurs reprises dans le code background l'évènenemt ReportProgress.
sois plus explicite stp!!!
Salut,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void MyMethodAsynchronAPasserALevenementDoWorkDuBackgroundWorker(object sender, DoWorkEventArgs evt) { for (int i = 0; i <100; i++) { ProgressChanged(sender, new ProgressChangedEventArgs(i, null)); } } private void MyMethoQuiMetAJourLaProgressBarADefinirPourLevenementProgessChangedDuBackgroundWorker(object sender, ProgressChangedEventArgs evt) { this.myProgressBar.Value = evt.ProgressPourcentage; }
Partager