Hallo, zum Verständnis allgemein erstmal (sollte auch die erste Anlaufstelle bei anderen Fragen bezüglich C# sein): http://msdn.microsoft.com/de-de/libr...erialport.aspx
Und nun zu deiner Frage:

Gesendet wird mit dieser Zeile: Es wird direkt der Inhalt der Textbox über die Serielleschnittstelle gesendet.
Es gibt auch die Möglichkeit mit "serialPort.Write(buffer[],int Offsize, int count);" Einzelne und mehrere Bytes zu senden, was man häufig bei einem Befehls bzw. Datenprotokoll braucht.
Code:
            //Hier werden die eingebenen Daten über die serielle Schnittstelle gesendet
            serialPort.WriteLine(tbDataToSend.Text);
Das Empfangen ist etwas komplizierter:
Zum einen muss man zuerst das SerialPort.DataRecieved Event abonnieren (Zur Eventbasierten Programmierung empfehle ich diesen Link hier: http://www.mycsharp.de/wbb2/thread.php?threadid=26116)
Code:
            serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); //DataRecieved Event abonnieren
Zum anderen muss man die Daten dann verarbeiten wenn, das Event ausgelöst wird (also Daten angekommen sind)
Code:
void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) //Methode die Aufgerufen wird, wenn das Event ausgelöst wurde. Die Methode wurde oben festgelegt beim abonnieren
        {
            foreach (var item in serialPort.ReadLine()) //Lese alle verfügbaren Daten. Hier gibt es auch noch andere Auslesemöglichkeiten wie z.B. Read() bzw ReadToEnd()
            {
                lbRecieved.Invoke(lbRecievedDelegate,new object[]{item});  //Das wird für den Zugriff auf die Gui benötigt. (Thread übergreifende Zugriffe)
            }
        }