Da gibt's meiner Meinung nach nur 2 Möglichkeiten:
1.) du programmierst einen eigenen Thread der die Kommunikation mit der seriellen Schnittstelle erledigt.
Multithreading unter VisualBasic ist allerdings keine triviale Angelegenheit! Falls du es dennoch mit einem Thread versuchen willst:
http://www.microsoft.com/msj/default...997/newnav.htm
oder
2.) du implementierst dir einen Timer, der deine zu sendenden Daten in nicht zu großen Blöcken wegschickt (damit er dein Programm nicht aufhält) und sich nach vollständigem Senden selbst bzw. über einen Cancel-Button terminiert