Bonjour
Je cherche a écouter un port UDP sur lequel je dois recevoir une trame périodiquement.
Là je le fais en remplissant une list<String> ainsi
le but étant de pouvoir afficher ce que j'ai reçu sur le thread de la form
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 private void UDPListener(int portEcoute) { Task.Run(async () => { IPEndPoint myIPendPoint = new IPEndPoint(IPAddress.Any, portEcoute); using (var udpClient = new UdpClient(myIPendPoint)) { string loggingEvent = ""; while (true) { var receivedResults = await udpClient.ReceiveAsync(); loggingEvent += Encoding.ASCII.GetString(receivedResults.Buffer); mylist.Add(loggingEvent); loggingEvent = ""; } } }); }
avec
que j'ai pour le moment mis sur un timer (ça clignote, c'est moche mais c'est pour apprendre...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 textBox1.Clear(); foreach (var item in mylist) { textBox1.AppendText(item + " \r\n"); }
tout ceci fonction jusqu'à un beau plantage System.InvalidOperationException
La collection a été modifiée ; l'opération d'énumération peut ne pas s'exécuter
forcément j'ai un thread qui rempli la list<string> et un autre qui cherche à faire une énumération.
En c avec les OS temps réels je connais les mutex pour gérer ça mais là je n'arrive pas à trouver le nom de ce que j'ai besoin de mettre en place pour éviter le conflit.
Merci par avance pour votre aide
Partager