void _spManager_NewSerialDataRecieved(object sender, SerialDataEventArgs e) { if (sendbuffer.Length > 0) { _spManager.SerialSend(sendbuffer); sendbuffer = ""; } if (this.InvokeRequired) { // Using this.Invoke causes deadlock when closing serial port, and BeginInvoke is good practice anyway. this.BeginInvoke(new EventHandler <SerialDataEventArgs>(_spManager_NewSerialDataRecieved), new object[] { sender, e }); return; } // This application is connected to a GPS sending ASCCI characters, so data is converted to text string str = Encoding.ASCII.GetString(e.Data); parse_data(str); }