Bonjour,
Je suis en train de faire une appli où des traitements de plusieurs secondes seront effectués. Je me remet donc à travailler avec le composant BackGroundWorker et avec une ProgressBar pour montrer que les traitements sont en cours.
Comme le BGW sera utilisé à plusieurs moments dans l'utilisation du logiciel, j'ai eu l'idée de créer un objet MyBackGroundWorker afin de faire quelque chose de générique. C'est peut-être une mauvaise idée.. Vous me direz si ça vous choque.
Voici l'objet en question:
Comme vous pouvez voir, j'ai liée une ProgressBar à l'objet pour voir l'avancement du traitement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 public class MyBackGroundWorker { private ProgressBar progressBar = null; private bool WorkCompleted = false; private BackgroundWorker worker = null; public MyBackGroundWorker(ProgressBar _progressBar) { this.progressBar = _progressBar; worker = new BackgroundWorker(); worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; worker.ProgressChanged += worker_ProgressChanged; worker.DoWork += worker_DoWork; worker.RunWorkerCompleted += worker_RunWorkerCompleted; } public void Start() { worker.RunWorkerAsync(); } public void Stop() { if (worker.IsBusy) worker.CancelAsync(); } private void worker_DoWork(object sender, DoWorkEventArgs e) { int i = 0; while (!this.WorkCompleted) { if (worker.CancellationPending) break; worker.ReportProgress(i); Thread.Sleep(300); if (i < 100) i += 5; else i = 0; } } private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.progressBar.Value = e.ProgressPercentage; } private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.progressBar.Value = 0; } }
J'ai deux questions:
- Comment passer une méthode (d'une manière générique) à l'objet pour que le BGW fasse le traitement en question?
- Comment mettre à jour la variable MyBackGroundWorker.WorkCompleted à jour une fois que le traitement est fini?
J'ai volontairement simplifié l'objet car tout les essais que j'ai fait non pas été concluant..
Merci de votre aide
Partager