wird's wohl am Source liegen.
Wie MichaelT es erwähnte, muß es garnicht am eigenem Programm liegen, sondern am Code/Firmware/Hardware des Senders (Arduino).
Wireshark verbiegt hier einiges an der Konfiguration, da kann es z.B. sein, daß "ungültige" Packete plötzlich vom System durchgelassen werden, welche sonst abgelehnt würden.
Über TThread.Synchronize und anonyme Methoden kann man sehr leicht den Thread wechseln.
Hier von irgendeinem Thread in den MainThread (wenn man sich in einer TThread-Instanz befindet, dann am Besten direkt
Synchronize(procedure ...
).
Und mit TThread.CreateAnonymousThread
in einem Thread ausführen (da, wo man sonst von TThread ableitet und Execute überschreibt ... nur halt mal bissl anders).
Bei anonymen Methoden kann man schön Variablen übergeben lassen, was sonst bissl schwerer wird, da Threadmethoden für Synchronize und Execute keine Parameter haben dürfen.
Delphi-Quellcode:
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
var
sText: String;
begin
sText := BytesToString(AData); // das kann im Thread bleiben (muß es aber nicht ... kommt drauf an, ob BytesToString threadsave ist)
TThread.Synchronize(nil, procedure
begin
Memo1.Lines.Add(sText); // Zugriff auf's Memo muß in den Hauptthread
end;
end;