Chers développeurs,
J'ai actuellement un problème avec la gestion des thread, c'est pour cela que j'invoque votre aide
Problème : Au démarrage de mon application je souhaite afficher une barre de progression (fenêtre chargement) et lorsque celle-ci est complète je souhaite ouvrir le menu (fenêtre menu). Pour ce faire je passe donc par la manipulation du thread principal et d'un thread actif. Voici mon code :
Mon problème est qu'au moment de l'appel de la méthode delegate, une erreur de type "NullReferenceException" apparaît, je ne comprends pas pourquoi car j'ai essayer dans un autre petit programme de manipuler des thread de la même façon est tout c'est bien passé, d'où vient le problème?
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 public partial classChargement : Form { ///<summary> Thread de chargement du programme </summary> private Thread thread_chargement; ///<summary> Pourcentage des traitements effectués </summary private int i_pourcent; private void Chargement_Load(object sender, EventArgs e) { /* J'instancie le thread et je lui assigne sa procédure de démarrage, ici Traitement_thread_chargement */ thread_chargement = new Thread(Traitement_thread_chargement); /* On lance le thread, et si il y a une exception, on le coupe */ try { thread_chargement.Start(); } catch { thread_chargement.Abort(); } } private void Traitement_thread_chargement() { /* Déclarations */ int i_nb_etape = 11; int i_pct_etape = 100 / i_nb_etape; i_pourcent = 0; f_anomalie = false; // .... Traitement simple if (f_anomalie != true) { i_pourcent = i_pourcent + i_pct_etape; Maj_barre_progression(); Thread.Sleep(2000); } // ... J'effectue d'autres traitements simple et je remets les mêmes conditions avec le if (Anomalie != true) à chaque fois pour modifier ma barre de progression. } ///<summary> Procédure de délégation du thread de chargement au thread principal qui va lancer Maj_barre_progression pour la mise à jour </summary> private delegate void Maj_barre_progression_delegate(); private void Maj_barre_progression() { /* On vérifie si cette procédure est appelée par le thread de chargement qui lui nécessite de déléguer la mise à jour de la fenêtre au thread Principal car il n'a pas le droit */ if (InvokeRequired == true) { /* Le thread de chargement délègue au thread principal la mise à jour de la fenêtre par Maj_barre_progression_delegate */ Invoke(new Maj_barre_progression_delegate(delegate { Maj_barre_progression(); } )); ERREUR EST ICI return; } } //... Mise à jour de ma barre de progression. }
Pour info : J'utilise le compact framework 3.5
Dans l'attente d'une réponse qui me sauvera, je vous remercie d'avance
Partager