Ich habe den UDP-Server in einem eigenen Thread laufen - und synchronisieren dann die Daten (wenn sie komplett sind) zur Oberfläche. Und es scheint, dass die Datenverluste genau zu diesem Zeitpunkt auftreten - genau kann ich das aber nicht sagen...
Da hast du doch schon den Implementierungsfehler. Wenn du synchronisierst wird den Thread angehalten und die Abarbeitung im Hauptthread weiter gemacht. Während dieser Zeit gehen natürlich alle ankommenden Daten verloren da ja keiner (Dein Thread ist ja durch den Hauptthread blockiert) die Daten annimmt.
Du musst also die Übergabe an die Darstellungsthread besser von deinem Empfangsthread entkoppeln.
Da ich hier wenig Erfahrung habe (bzw. sehr lange her) hier ein (evtl. fehlerhafter) Ansatz:
Statt normal zu synchronisieren triggerst du (z.B. über PostMessage) den Hauptthread. Der holt sich die Daten dann aus einem threadsicheren Datenbereich (das Abholen darf natürlich nicht zu blockieren deines UDP-Threads führen). evtl. einfach nur für jedes vollständige Datenpacket einen "Aufhänger" einen simple TThreadList übergeben.
Windows Vista - Eine neue Erfahrung in Fehlern.