du weist was Threading ist ?
http://www.devtrain.de/news.aspx?artnr=790

Threads werden quasi "parallel" ausgeführt. Zumindest gaukelt einem das Betriebssystem das vor. Sprich wenn du den Teil der dir alles zum stocken bringt, dein Zugriff auf den Serialport in einen Thread auslagert, sollte deine GUI ohne stocken weiterlaufen.

In C# würde das ganze dann in etwa so aussehen

System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(Methode));

void Methode()
{
Das hier wird in einem anderen Thread ausgeführt als deine GUI

}

Was du beachten solltest dass bevor du auf irgendwelche GUI Controls aus dem neuen Thread zugreifst diese Invoken musst.

Aber dafür gibt auch einige Tutorials im Internet