Würde es dir was ausmachen den Code als Textdatei anzuhängen? Hab grad leider nichts zum .rar öffenen da.
Ganz einfach kannst du das Problem mit dem Threadübergreifenden zu Griff aber so lösen: (Ich beziehe mich bei der Namensgebung der Controls bzw. Objekte auf mein Beispielprogramm)
Code:
void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{     
   //Hier die Daten die du ausgelesen hast in irgendeiner globalen Variable speichern
   lbRecieved.Invoke(new MethodInvoker(MethodeZumDatenInListboxSchreiben));
}
void MethodeZumDatenInListboxSchreiben()
{
lbRecieved.Items.Add(<Daten aus der globalen Variable>);
}
In meinem Programm habe ich das ganze mit einem Delegaten gelöst was den Vorteil hat dass man sich z.B. den Umweg über die globale Variable sparen kann.

Hier kannst du das auch nochmal nachlesen:
http://www.mycsharp.de/wbb2/thread.php?threadid=33113