所有,这里有一只新蜜蜂,我正在寻求帮助。我很茫然。在下面,您将找到一部分代码,在其中我从串行端口接收的字符串中删除了<和>。在我将串行消息发送回另一台设备之前,这一切都很好用(只需编程一个按钮即可发送消息)。然后程序停止并告诉我“ System.ArgumentOutOfRangeException:'StartIndex不能小于零。”。
它在“字符串CleanString1 = notStartStartString1.Remove(endOfString1);”处停止
我们将竭诚为您服务。
private void DataReceivedHandler1(object sender1, SerialDataReceivedEventArgs e )
{
SerialPort sp1 = (SerialPort)sender1;
string indata1 = sp1.ReadLine();
Console.WriteLine("Data Received1:"+ indata1);
int startOfString1 = indata1.IndexOf('<');
string withoutStartOfString1 = indata1.Remove(0, startOfString1 + 1);
int endOfString1 = withoutStartOfString1.LastIndexOf('>');
string CleanString1 = withoutStartOfString1.Remove(endOfString1);
txtReceive1.BeginInvoke((new myDelegate1(Serial_Text_Out1)), CleanString1);
txtReceive1.BeginInvoke ((new myDelegate1(Serial_Text_Out1)), CleanString1);
/*
* ROBOT 1 Section to convert "CleanSting so it can be used else where
*/
void Serial_Text_Out1(string Clean1String1)
{
txtReceive1.Text= Clean1String1;
string[] words1 = CleanString1.Split(',');
txtIdentifier1.Text = words1[0];
txtValue1_1.Text = words1[1];
txtValue1_2.Text = words1[2];
txtValue1_3.Text = words1[3];
txtValue1_4.Text = words1[4];
}
}
答案 0 :(得分:0)
问题从这里开始
int endOfString1 = withoutStartOfString1.LastIndexOf('>');
endOfString1 < 0
。这意味着withoutStartOfString1
不包含>
字符。
也许最好使用string.Split这样的方法:
string[] data = indata1.Split(new[]{'<', '>'}, StringSplitOptions.RemoveEmptyEntries);
从数组中获取价值。