Bonjour,
Je tente de coder un programme qui utilisera plusieurs thread :
- Un mettra à jour une liste (ajout/suppression d'éléments) selon des message reçu par des providers
- Un effectuera la communication avec un client et devra pouvoir généré un message à partir de la liste
Pour l'instant je génère la liste manuellement (je m'occuperais de la discussion avec les providers plus tard).
La discussion avec le client fonctionne sans problème si je n'utilise pas la liste (je génère manuellement un string à la place).
Mon problème est que le thread du client parviennent à lire la liste.
Mon Main est le suivant :
Dans mon thread ClientAPP j'ai ce bout de code qui fonctionne parfaitement :
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 static void Main(string[] args) { List<Provider> providerList = new List<Provider>(); //Création d'une liste de provider //Gestion des providers - Création de deux faux providers manuellement Provider prov1 = new Provider("AWAKE 15000 Test1\r\n"); providerList.Add(prov1); Provider prov2 = new Provider("AWAKE 15000 Test2\r\n"); providerList.Add(prov2); //Gestion de la communication avec un client ClientApp threadHandle = new ClientApp(DEFAULT_PORT); Thread th = new Thread(new ThreadStart(threadHandle.clientCom)); th.Start(); //Appuyer sur une touche pour fermer la console Console.ReadKey(); }
Seulement j'aimerais plutôt faire un truc comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 private string listrResponse() { string response = "RLIST Test1,INTEGER Test2,INTEGER\r\n"; return response; }
Mais j'obtiens 'The name doesn't exist in the current context'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private string listrResponse() { string response = "RLIST"; foreach (Provider prov in providerList) { response += " " + prov.ressource + "," + prov.type; } response += "\r\n"; return response; }
Si je met smartHub.providerList (mon main est dans smarthub) j'obtiens 'SmartHub does not containt a definition for 'providerlist'.
J'ai tenté de mettre un 'public' devant ma liste mais ça ne change rien...
Ma question : est-il donc possible de 'partager' une liste entre thread et si oui, c'est quoi l'astuce ?
En vous remerciant
NB : Provider étant une classe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Provider { public string ressource; public string port; public string type; public Provider(string awake) { ressource = awake.Substring(awake.LastIndexOf(" ")+1, awake.IndexOf("\r\n") - awake.LastIndexOf(" ")-1); port = awake.Substring(awake.IndexOf(" ") + 1, awake.LastIndexOf(" ") - awake.IndexOf(" ")-1); type = "INTEGER"; } }
Partager