Salut à tous,
J'essaie de me créer un petit chat et pour ce faire, j'essaie de détecter le changement de la valeur d'une liste (les messages).
J'utilise un backgroundWorker pour l'attente d'un nouveau message. Lorsqu'un nouveau message est envoyé, le backgroundWorker ajoute ce nouveau message à la variable liste. Celle-ci est donc modifiée et doit donc, à ce moment là incrèmenter une listeBox.
J'espère avoir été assez compréensible pour l'instant.
Mon problème est le suivant: tout se déroule bien mise à part que je n'arrive pas à atteindre la listBox pour l'incrémenter.
Pare contre j'arrive à lister les message à l'aide d'un MessaBox.Show().
Voici le code en espérant que vous pourez proposer des solutions
Et le "MyCollections"
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.Net; namespace WindowsFormsApplication1 { using MyCollections; public partial class Form1 : Form { private UdpClient udp; private ListWithChangedEvent messages = new ListWithChangedEvent(); public Form1() { InitializeComponent(); udp = new UdpClient(1600); EventListener listener = new EventListener(messages); backgroundEcouteMessage.RunWorkerAsync(); } private void backgroundEcouteMessage_DoWork(object sender, DoWorkEventArgs e) { try { IPEndPoint EmetteurIpEndPoint = new IPEndPoint(IPAddress.Any, 1600); Byte[] donneesRecues = udp.Receive(ref EmetteurIpEndPoint); string message = Encoding.Unicode.GetString(donneesRecues); string ip = EmetteurIpEndPoint.Address.ToString(); messages.Add("message de " + ip + " : " + message); } catch { } } private void backgroundEcouteMessage_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { backgroundEcouteMessage.RunWorkerAsync(); } } public class EventListener { private ListWithChangedEvent Messages; public EventListener(ListWithChangedEvent list) { Messages = list; Messages.Changed += new ChangedEventHandler(ListChanged); } private void ListChanged(object sender, EventArgs e) { foreach (string mes in Messages) { MessageBox.Show(mes); //lstMessages.Items.Add(mes); } } public void Detach() { Messages.Changed -= new ChangedEventHandler(ListChanged); Messages = null; } } }
Merci d'avance pour votre aide qui, je l'espère me sera très précieuse
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 namespace MyCollections { using System; using System.Collections; public delegate void ChangedEventHandler(object sender, EventArgs e); public class ListWithChangedEvent : ArrayList { public event ChangedEventHandler Changed; protected virtual void OnChanged(EventArgs e) { if (Changed != null) Changed(this, e); } public override int Add(object value) { int i = base.Add(value); OnChanged(EventArgs.Empty); return i; } public override void Clear() { base.Clear(); OnChanged(EventArgs.Empty); } public override object this[int index] { set { base[index] = value; OnChanged(EventArgs.Empty); } } } }![]()
Partager