Bonjour,

Actuellement en train de découvrir les threads, j'ai décidé de revoir mon application avec l'utilisation des threads avant d'avancer trop loin dans le projet, seulement je rencontre beaucoup de problème (en faite à chaque modification de mon code j'ai un problème...)

Cette fois ci, ce sont mes threads qui lance un timer "maison" qui se mélange, du moins je pense car à débugger c'est pas simple du tout.
Il y a pour l'instant dans mon code 2 thread "enfant" en plus du thread d'origine.

Alors voici le code d'un bouton qui démarre 1 thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
private void Timer1_Click(object sender, EventArgs e)
        {
                AiIMP++;
                tabIMP[AiIMP] = "iram010" + AiIMP;
                Thread t1 = new Thread(new ParameterizedThreadStart(obj => { lancementTimer(e); }));
                t1.Start();
        }
Le thread va donc lancer cette méthode:
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
public void lancementTimer(EventArgs e)
        {
            int i = 0; int idthread = ++id;
            while (true)
            {
                    i++;
                    Invoke((vider)viderTB);
                    Invoke((montrerSpool)ajoutTB, "Timer vaut " + i + ". Thread N° " + idthread);
                    //lectureSpooler(nomIMP);
                    if (i == 10000)
                    {
                        i = 0;
                    }
                    Thread.Sleep(500);
            }
        }
Dans cette méthode, les deux Invoke font référence à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public void ajoutTB(string valeur)
        {
            lock (_lock)
            {
                int i;
                for (i = 0; i < 5; i++)
                {
                    if (tabIMP[i] == "iram0101") { textBox1.Text += (valeur) + Environment.NewLine; }
                    if (tabIMP[i] == "iram0102") { textBox2.Text += (valeur) + Environment.NewLine; }
                    if (nomIMP == "iram0103") { textBox3.Text += (valeur) + Environment.NewLine; }
                    if (nomIMP == "iram0104") { textBox4.Text += (valeur) + Environment.NewLine; }
                }
            }
        }
Et:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 public void viderTB()
        {
            int i;
            for (i = 0; i < 5; i++)
            {
                if (tabIMP[i] == "iram0101") { textBox1.Clear(); }
                if (tabIMP[i] == "iram0102") { textBox2.Clear(); }
                if (nomIMP == "iram0103") { textBox3.Clear(); }
                if (nomIMP == "iram0104") { textBox4.Clear(); }
            }
        }
Lorsque je clique sur mon bouton qui démarre la méthode "Timer1_Click", aucun problème, tout ce déroule très bien mais lorsque que je veux ajouter un second thread en plus du premier, tout se mélange, le premier thread apparait dans les deux textBox ainsi que le deuxième.

Je vous donne le code du deuxième thread:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
        private void Timer2_Click(object sender, EventArgs e)
        {
                AiIMP++;
                tabIMP[AiIMP] = "iram010" + AiIMP;
                Thread t2 = new Thread(new ParameterizedThreadStart(obj => { lancementTimer2(e); }));
                t2.Start();
        }
Identique au premier donc, seul la méthode lancé par ce thread est différent afin qu'il est un timer différent chacun.

J'en conclu donc qu'il doit y avoir un problème lors que l'affichige, j'ai essayé de mettre un lock dans la méthode "ajoutTB" mais rien ne change.
Je pense que je n'ai pas encore tout à fait compris le concept des threads mais la je suis complétement dans l'impasse, quelqu'un aurait il une solution et une explication à me donner?