串行数据输入文本框

本文关键字:文本 输入 数据 | 更新日期: 2023-09-27 18:07:36

我从串行中获取数据并将其拆分为不同的文本框。这是有效的,但是在大约2个读数后,程序冻结并出现错误"indexoutorange在Set1(array[0])Set2(array[1])行上未处理"。

这是我的代码,任何帮助都是非常感谢的。

 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        string data_in = serialPort1.ReadExisting();
        char[] delimiter1 = new char[] { '*' };
        string[] info = data_in.Split(delimiter1, StringSplitOptions.None);
        this.BeginInvoke(new EventHandler(delegate
        {
            //Set(array);
            Set1(info[0]);
            Set2(info[1]);
        }));
        Application.DoEvents();
    }
    private void Set(string[] strText)
    {
        tbFib.Text = strText[0];
    }
    private void Set1(string strText)
    {
        tbGravity.Text = strText;
    }
    private void Set2(string strText)
    {
        tbTemp.Text = strText;
    }

串行数据输入文本框

来自serialPort1.ReadExisting()的数据显然在某些(或所有)情况下不包含*。这将导致调用data_in.Split返回一个可能为空的数组。

一个明显的解决方案是在尝试访问数组中可能不存在的位置之前检查info的长度。