Mam taki kod w backgroundWorker:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
UdpClient klient = new UdpClient(port);
IPEndPoint adresIP = new IPEndPoint(IPAddress.Parse(adresIPSerwera), 0);
string wiadomosc = null;
bool a = false;
while (true)
{
Byte[] bufor = klient.Receive(ref adresIP);
string dane = Encoding.UTF8.GetString(bufor);
string[] cmd = dane.Split(new char[] { ':' });
switch (cmd[1])
{
case "SAY":
if (cmd.Length > 2)
{
wiadomosc = cmd[2];
for (int i = 3; i < cmd.Length; i++)
wiadomosc += ":" + cmd[i];
}
WpiszTekst(cmd[0], wiadomosc);
break;
(...) // inne case
case "LIST":
for (int i = 2; i < cmd.Length + 1; i++)
{
foreach (string user in listBox1.Items)
{
if (user == cmd[i])
a = true;
}
if (a == false)
SetText(cmd[i]); <--- o to chodzi
}
break;
(...) // inne case
}
}
}
delegate void SetTextCallBack(string tekst);
private void SetText(string tekst)
{
if (listBox1.InvokeRequired)
{
SetTextCallBack f = new SetTextCallBack(SetText);
this.Invoke(f, new object[] { tekst });
}
else
{
this.listBox1.Items.Add(tekst);
}
}
Czyli wywołanie SetText(cmd[i]) powinno mi wpisać na listbox wszystkie elementy z tablicy cmd[2+], których jeszcze tam nie ma. Ale jak to odpalam to ani nie dopisuje do listbox tego co powinien a dodatkowo nawet nie widzi wiadomości z cmd[1] = "SAY" (wiadomości przychodzące nie są wypisywane)... Jak tą linijkę zakomentuję to wtedy normalnie wiadomości dochodzą... Dodatkowo jak wstawię jakiegoś buttona i w nim umieszczę metodę SetText("cos tam") to wypisuje normalnie...
Ma ktoś pomysł co tutaj jest nie tak ?
Z góry dziekuję za pomoc.