Hey genau dafür hab ich mal ein recht ausführliches Beispiel geschrieben:
https://www.roboternetz.de/community...ght=Serialport
Da wird auch genau drin beschrieben wie man die Daten sich in WinForms anzeigen lassen kann und worauf man achten muss. Auf der letzten Seite sind noch mal häufig auftretende Probleme zusammengefasst.

Ps. Was das mit dem Buffer angeht würde ich lieber eine System.Collections.Concurrent.ConcurrentQueue<T> verwenden.