Bonjour,
Je fais un traitment qui demande un peu d'attente mais je ne peux pas connaitre sa durée. Donc je souahaite créer une progressBar infinie. J'ai commencé à créer quelque chose qui me parait bien mais j'ai une exception qui est retourné correspondant à un thread et je ne sais pas comment le résoudre.
En fait je créer une classe qui hérite de la class ProgressBar. J'ajoute un timer et
quand je veux commencer l'animation de ma barre je démarre mon timer et à chaque tick du timer j'ajoute 1 à la valeur de la progressBar.
Voici mon code:
Mon exception survient dans la fonction "animBar()" à l'instruction "this.Value++;"
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 using System; using System.Collections.Generic; using System.Text; using System.Timers; namespace Gestion_financière { class InfiniteProgressBar : System.Windows.Forms.ProgressBar { Timer timer; public InfiniteProgressBar() { this.Maximum = 100; this.Minimum = 0; this.Value = 0; timer = new Timer(); } //Démarre l'animation public void start() { timer.Elapsed += new ElapsedEventHandler(animerBar); timer.Interval = 1000; timer.Start(); } //anime la bar de progression private void animerBar(object source, ElapsedEventArgs e) { if (this.Value == 100) this.Value = 0; this.Value++; //Mon exception survient à ce moment } //Stop l'animation public void stop() { timer.Stop(); this.Value = 0; } } }
Voici mon exception:
Si j'ai bien compris ma progressBar ne se trouve pas dans le même thread de mon timer donc il n'arrive à ajouter ma valeur.InvalidOperationException was unhandled by user code
Cross-thread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on.
Mais pourtant il ajoute 1 à ma valeur. Donc en fait je pense que je n'ai rien compris.
D'où vient le problème?
merci d'avance pour votre aide.
Partager