Envoyé par
MaximePalmisano
Au vu du namespace:
Je pense que c'est du WinForm.
Par curiosité, pourquoi hérites tu d'ArrayList et pas de List<T> ? Au vu du reste du code, j'imagine que c'est parce que tu viens du Java. Je n'ai pas l'habitude de voir une classe comme ton EventListener en C#.
Je pense que ton soucis est que tu as "externalisé" la gestion de ton "CollectionChanged" dans une autre classe, alors que ça pourrait être fait directement dans ta première classe en t'abonnant avec +=.
Tout d'abord merci pour vos réponses.
Pour ce qui est de ta curiosité, je ne connais juste pas la solution dont tu me parle en citant List<T> car je ne la connais pas. parles-tu d'un
List<String> MaListe = new List<String>()
?
Si oui, effectivement j'aurais pu.
Cela dit, je doute que mon problème vienne de là.
J'ai modifié le code et n'appelle plus ma classe EventListening. Je m'abonne dirrectement via Form1() ma classe de base.
Cela me donne une classe inutile de moin.
Pour ce qui est de mon problème, lors de la réception d'un message, la fonction RefreshMessages() s'exécute bien mais n'arrive pas à incrémenter le textBox que j'ai créé pour le test.
Je dirrais même plus.
Si je mets un "MessageBox.Show(mes)" à la place, du "txtMessage.Text += mes", cela affiche bien, les messages recus l'un après l'autre.
Si je mets les deux, un seul MessageBox() apparet. Comme si la tentative d'accès à la textBox faisait planter la boucle ou fonction.
PS: Aucune alerte en débug mod
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
| namespace WindowsFormsApplication1
{
using MyCollections;
public partial class Form1 : Form
{
private UdpClient udp;
private ListWithChangedEvent messages = new ListWithChangedEvent();
public Form1()
{
InitializeComponent();
udp = new UdpClient(1600);
messages.Changed += new ChangedEventHandler(ListChanged);
backgroundEcouteMessage.RunWorkerAsync();
}
private void ListChanged(object sender, EventArgs e)
{
RefreshMessages();
}
private void RefreshMessages()
{
foreach (string mes in messages)
{
//this.lstMessages.Items.Add(mes);
MessageBox.Show(mes);
this.txtMessages.Text += mes;
}
}
public void Detach()
{
messages.Changed -= new ChangedEventHandler(ListChanged);
messages = null;
}
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();
}
}
} |
encore merci d'avance
Partager