salut les gars
j'ai besoin de vos avis/idées, je patauge complètement avec les Thread ...
c'est la 1ere fois que je vais essayer de faire un "petit projet" personnel et j'ai l'impression d'être un aveugle qu'on a lancé dans un champ de mine
pour l'instant je suis sur un projet annexe dédié a tous les tests que j'ai besoin de faire pour comprendre le fonctionnement des Thread et la manière de les utiliser .... intelligemment (pas gagné ).
voici le code de mon appli winforms de test :
l'évènement Form1_Load va créer 5 Thread.
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 // Evenement load de mon Form private void Form1_Load(object sender, EventArgs e) { Debug.WriteLine("-------------------------------------------------------------------"); for (int a = 0; a < 5; a++) { ThreadGestion threadGestion = new ThreadGestion(a); ThreadStart delegue = new ThreadStart(threadGestion.tester); Thread tache = new Thread(delegue); tache.Name = "Thread " + a; Debug.WriteLine("Lancement : " + tache.Name); tache.Start(); } } // la classe de gestion des thread et des actions qu'ils doivent effectuer public class ThreadGestion { public static int[] _tbCompteur = new int[] { 0, 0, 0, 0, 0 }; public int _index; public ThreadGestion(int index) { _index = index; } public void tester() { while (Thread.CurrentThread.IsAlive) { Debug.WriteLine("tester(" + Thread.CurrentThread.Name + ") : " + ThreadGestion._tbCompteur[_index]); ThreadGestion._tbCompteur[_index]++; if (ThreadGestion._tbCompteur[_index] > 5) { Debug.WriteLine("ARRET : " + Thread.CurrentThread.Name); Thread.CurrentThread.Abort(); } } } }
chacun des Thread recevra un index (0 a 4) qu'il va utiliser pour incrémenter la valeur correspondant a l'index dans un tableau de int.
la classe ThreadGestion va s'occuper de gérer l'action des Thread et stocker en static le tableau de int dont les 5 valeurs devront être incrémentées jusqu'à 5.
voici le résultat en sortie :
-------------------------------------------------------------------
Lancement : Thread 0
Lancement : Thread 1
Lancement : Thread 2
tester(Thread 0) : 0
tester(Thread 1) : 0
tester(Thread 1) : 1
tester(Thread 1) : 2
tester(Thread 1) : 3
tester(Thread 1) : 4
tester(Thread 1) : 5
ARRET : Thread 1
tester(Thread 0) : 1
tester(Thread 0) : 2
tester(Thread 2) : 0
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
Lancement : Thread 3
Le thread 0xad0 s'est arrêté avec le code 0 (0x0).
tester(Thread 0) : 3
tester(Thread 0) : 4
tester(Thread 2) : 1
tester(Thread 2) : 2
tester(Thread 2) : 3
tester(Thread 2) : 4
tester(Thread 3) : 0
tester(Thread 3) : 1
tester(Thread 3) : 2
tester(Thread 3) : 3
tester(Thread 3) : 4
tester(Thread 3) : 5
ARRET : Thread 3
tester(Thread 0) : 5
ARRET : Thread 0
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
tester(Thread 2) : 5
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
Le thread 0xc9c s'est arrêté avec le code 0 (0x0).
Le thread 0xabc s'est arrêté avec le code 0 (0x0).
Lancement : Thread 4
ARRET : Thread 2
tester(Thread 4) : 0
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
tester(Thread 4) : 1
tester(Thread 4) : 2
Le thread 0xda0 s'est arrêté avec le code 0 (0x0).
tester(Thread 4) : 3
tester(Thread 4) : 4
tester(Thread 4) : 5
ARRET : Thread 4
Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans mscorlib.dll
Le thread 0xcd0 s'est arrêté avec le code 0 (0x0).
'testThread_FTP.vshost.exe' (Managé)*: 'C:\WINDOWS\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_fr_b77a5c561934e089\mscorlib.resources.dll' chargé
Le thread 0xaa4 s'est arrêté avec le code 0 (0x0).
Le thread 0xac8 s'est arrêté avec le code 0 (0x0).
Le programme '[2992] testThread_FTP.vshost.exe: Managé' s'est arrêté avec le code 0 (0x0).
j'utilise du Debug.writeLine() a tous les niveaux pour bien suivre ce qui ce passe et c'est la que je découvre le problème ... j'ai des choses bizarres dans le panneau de sortie sans être capable de comprendre pourquoi
ya plein d'exceptions
quelqu'un a une idée sur le(s) problème(s)
merci
Partager