That's very odd - you are only accessing the text box within the delegate which is always invoked, so the exception shouldn't be happening. And within the delegate, you are catching exceptions so you shouldn't see them anyway.
But a couple of things to try and improve the situation.
1) You don't need a InvokeRequired test: DataReceived is always on a separate thread, it is never on the UI thread - see the documentation:
SerialPort.DataReceived Event (System.IO.Ports)[
^]
2) Do all your parsing in the current thread, and make the UI do just the "invocable" code - that way your UI should stay more responsive as you are minimising its work if there is a lot to do.
So try like this:
void lobjCOM1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string lsCOM1Val = lobjCOM1.ReadExisting();
if (lsCOM1Val.Length > 8)
{
if (lsCOM1Val.Substring(lsCOM1Val.Length - 8, 1) == "H")
{
string value = "99.999";
try
{
value = (Int64.Parse(lsCOM1Val.Substring(lsCOM1Val.Length - 6, 5)) / 1000).ToString() + "." + String.Format("{0:000}", (Int64.Parse(lsCOM1Val.Substring(lsCOM1Val.Length - 6, 5)) % 1000));
}
catch (FormatException ex) {}
txtC2.BeginInvoke((MethodInvoker)delegate() { this.txtC2.Text = value; });
}
}
}
Which should make it easier to debug any odd exceptions you do get.