GUI Invoke behindert separaten Thread?!

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Theckwolf.

    GUI Invoke behindert separaten Thread?!

    Hallo zusammen,

    habe in meiner WinForms-Anwendung 2 Threads laufen (jeweils mit .IsBackground = True).

    Der erste joint eine UDP-Multicastgruppe und bekommt in einer Dauerschleife ca. alle 3ms Daten davon (jeweils ca. 17k).

    Der zweite updated in einer Dauerschleife mittels Control.Invoke die GUI mit den Daten aus dem erhaltenen Byte-Array (2 Textfelder, 2 Datagridviews). Das ganze erfolgt mit Hilfe von Threading.thread.sleep(1000) alle 1 Sekunde.

    Durch eine Packet-ID im Datenheader kann ich sehen, ob ich Pakete nicht bekommen habe.

    Wenn ich nur die Textfelder aktualisiere, ist alles ok, nehme ich aber noch die Datagridviews mit dazu, verliere ich Pakete!

    Wieso beeinflussen die Threads sich gegenseitig? Und wie kann ich's besser machen?

    Habe schon versucht das empfangene Daten-Array mit Array.Copy zu kopieren um es in Ruhe darstellen zu können, aber das kostet EXTREM viel Zeit...

    Ich verliere übrigens auch schon einen Haufen Pakete, wenn ich nur die Form resize...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Theckwolf“ ()

    Theckwolf schrieb:

    Das ganze erfolgt mit Hilfe von Threading.thread.sleep(1000) alle 1 Sekunde.
    Welcher Thread wird denn da ausgebremst?
    Wie oft mit wieviel Einzelpaketen rufst Du Invoke() auf? => Lieber seltener mit größeren Paketen aufrufen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!