bonjour,

J'ai une variable de classe (statique) dont je veut me servir pour peupler une combox box. Dans l'objet père (A) je ne fait que des get.
Seulement je remplie cette variable (un list<>) avec un thread (B).

De base j'ai forcement des erreurs car la variable est modifié pendant que A essaye de la lire par (B).
Pour remplir ma liste j'utilise des évènement qui remonte du thread juste qu'à A (c'est la seule facon que j'ai trouvé de lié mon thread à ma liste) et j'utilise un fonction de A pour les sets.

J'ai pensé a utiliser un mutex dans A autour des get; set; de la liste mais cela me reourne inévitablement l'erreur :
La méthode de synchronisation de l'objet a été appelée à partir d'un bloc de code non synchronisé.
lorsque je tente de realese le mutex après mes sets.

Les obtention de passage et les release se font toutes dans l'objet A, mais je doute que cela change grand chose.

Je vous mes les morceaux de codes impliqués si cela peut vous aider.

Dans l'objet A :
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
 
        public static List<String> DataListToLog = new List<string>();
        private Mutex mutexDataList = new Mutex(false, "MutexDataList");
 
public void update()
        {
            try
            {
                mutexDataList.WaitOne(10);
 
                foreach (string s in DataListToLog)
                {
                    if (s[0] == 52)
                    {
                        DataOutBox.Items.Add(s.Substring(1));
                    }
                }
            }
            catch (Exception e)
            {
            }
            finally
            {
                mutexDataList.ReleaseMutex();
            }
            DataOutBox.Update();
        }
 
public void AddDataToLog(string data)
        {
            try
            {
                mutexDataList.WaitOne(10);
 
                DataListToLog.Add(data);
            }
            catch (Exception e)
            {
            }
            finally
            {
                mutexDataList.ReleaseMutex(); //l'exception est catch ici
            }
        }
Dans le thread B: :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
private void FTDIWriteThread()
        {
            while (true)
            {
                string TrameOut = "4 Hello Wolrd";
                WriteOnFTDI(TrameOut);
                onLogDataIn(TrameOut); // cet évènement va remonter jusqu'à AddDataToLog(..);
            }
        }
update(); est appelé par le thread principal, ou plutot un objet qui me sert de boucle de traitement. le thread B est un objet d'un objet qui appartient à cette boucle.
En éspérant avoir été suffisament limpide dans mes explications.

Un petit coup de main sil vous plait ! ^^