串行发送,然后发送System.ArgumentOutOfRangeException:'StartIndex不能小于零

时间:2019-01-09 03:28:50

标签: c#

所有,这里有一只新蜜蜂,我正在寻求帮助。我很茫然。在下面,您将找到一部分代码,在其中我从串行端口接收的字符串中删除了<和>。在我将串行消息发送回另一台设备之前,这一切都很好用(只需编程一个按钮即可发送消息)。然后程序停止并告诉我“ 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];                                              
        }

    }

1 个答案:

答案 0 :(得分:0)

问题从这里开始

int endOfString1 = withoutStartOfString1.LastIndexOf('>');

endOfString1 < 0。这意味着withoutStartOfString1不包含>字符。

也许最好使用string.Split这样的方法:

string[] data = indata1.Split(new[]{'<', '>'}, StringSplitOptions.RemoveEmptyEntries);

从数组中获取价值。