Prosty serwer UDP w C# WindowsForms - problem z wątkami

0

Witam,

Szukam jakiegoś bardzo prostego serwera UDP z GUI, który będzie wyświetlał dane przy użyciu jakiejś kontrolki - najlepiej ListBox.
Znalazłem tutorial na stronie: http://technotif.com/creating-simple-udp-server-client-transfer-data-using-c-vb-net/
gdzie jest przykład takiego programu jednak nie działa on prawidłowo.
Z aplikacją klienta nie ma problemu jednak serwer w momencie odbioru danych wyrzuca błąd jak na załączonym screenie

Error

Niby w tutorialu jest informacja o możliwości wystąpienia takiego błędu, ale nie jestem na tyle biegły w programowaniu żeby zaimplementować rozwiązanie do mojego kodu:
https://msdn.microsoft.com/en-US/library/ms171728(v=vs.80).aspx

Załączam również kod "mojego" programu.
Czy ktoś jest w stanie zmodyfikować go tak aby działał prawidłowo lub wskazał jak go poprawić?

1

Musisz sprawdzić czy jest potrzeba odwoływania się z innego wątku.
Do tego potrzebny nam będzie delegat i metoda która będzie dodawała rzeczy do ListBoxa.

delegate void SetTextCallback(string text); // Użyjemy go gdy będzie trzeba się odwołać

void SetText(string text)
{
    if(lbConnections.InvokeRequired) // Jeżeli musimy się odwołać
    {
         SetTextCallback callback = new SetTextCallback(SetText);
         this.Invoke(callback, new object[] { text });
    }
    else
    {
         lbConnections.Items.Add(text);
    }
}
0

@atmal - dzięki za wyjaśnienie i kod.

Działa! :)

1
atmal napisał(a):
         this.Invoke(callback, new object[] { text });

Zastanawia mnie, dlaczego każdy przykład z Invoke ma tę samą „usterkę”.
Invoke ma słowo params, więc nie trzeba tej tablicy ręcznie tworzyć:

 this.Invoke(callback, text);

1 użytkowników online, w tym zalogowanych: 0, gości: 1