Das Beispiel klappt gut, wenn ein Enter am Ende eines Datenpakets gesendet wird. Das war bei mir leider nicht immer der Fall. Deshalb musste ich dann trotzdem schauen, ob etwas im Buffer ist.
Ich habe dafür in dem Thread mit CheckForDataOnSource nachgeschaut, ob Daten da sind. Diese Funktion hat den Vorteil, dass sie ein Timeout hat, so dass man sich das Sleep sparen kann.