Hallo,
ich würde mal sagen dein Problem liegt hier:
Synchronize(UpdateForm3);
So wie es aussieht, machst du die ganzen Prüfungen, ob ich etwas an den
COM-Ports geändert hat, in der UpdateForm3. Diese Methode lässt du aber mit Synchronize aufrufen, was bewirkt, dass der Thread des Formulars solange angehalten wird, bis die Abarbeitung der UpdateForm3 abgeschlossen ist.
Pack doch diese ganzen Checks in eine andere Methode oder einfach in die Execute Methode und schreib in die UpdateForm3 nur rein, was an der Form3 geändert werden soll. Und dann rufst du die UpdateForm3 mit Synchronize nur dann auf, wenn sich wirklich was geändert hat.
So wie du es gerade implementiert hast, ist der Thread ziemlich nutzlos.
Ich hoffe, dass ich es einiermaßen verständlich erklärt habe.
[edit]
Ok ich habe grad nochmal die Delphihilfe angeschaut und Synchronize bewirkt, dass die Methode im Hauptthread ausgeführt wird und der aktuelle Thread für die Zeit der Ausführung unterbrochen wird. Es kommt im Endeffekt aber auf das selbe raus, dass der Hauptthread während der Abarbeitung der UpdateForm3 nicht auf andere Sachen reagieren kann.
[/edit]