Irgendwie bin ich grade zu blöd im Netz ne Doku zu diesem TComPort zu finden ... alles was ich bisher gesehen habe deutet darauf hin dass du Timeouts einrichten musst damit er auch nach einem unvollständigem lesen definiert zurück kommt und sich dabei nicht komplett aufhängt.
Generell würde es Sinn machen das reine lesen des Com Port in einen steuerbaren Thread auszulagern, der einfach kontinuierlich versucht "ein paar" bytes zu lesen und die dann in einen von dir kontrollierten Puffer zu speichern, von dem du dann aus dem GUI Thread lesen kannst. Das war auch damals mein Ansatz gewesen aber ich musste mich noch der Windows API für COM bedienen.
Wenn beim Lesen Bytes ankommen hängst du die in deinen Puffer und inkrementierst entsprechend den "noch zu Lesen" Counter und kannst im Hauptprogramm dann zyklisch darauf warten dass genug Daten ankommen.
Wenn beim Leseversuch keine Bytes rauskommen und ein Timeout entsteht gehst du einfach wieder auf Empfang und wartest das nächste Timeout ab oder dass neue Daten kommen, in der Schleife sollte dann auch eine Abbruchbedingungn enthaletn sein, damit du den Thread von außen auch abbrechen kannst und ein Thread.yield() damit der Prozess die CPU nicht permanent beansprucht. So hast du keine Hänger in der GUI während des wartens auf neue Daten.
Aber wie man ein Timeout bei TComPort einrichtet kann ich dir nicht sagen ich habe damals noch mit der WIN API gearbeitet und diese brutalen Riesenstructs zum COM initialisieren verwendet.
Lesezeichen