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








Répondre avec citation
Partager