我从串口获取数据并将其拆分为不同的文本框。这样做有效,但在大约2次读数后,程序冻结并出现错误" IndexOutOfRange未在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;
}
答案 0 :(得分:1)
来自serialPort1.ReadExisting()
的数据显然在某些(或所有)案例中不包含*
。这将导致您调用data_in.Split
返回可能为空的数组。
一个明显的解决方案是在尝试访问阵列中可能不存在的位置之前检查info
的长度。