我有一个arduino& c#项目。我有一个port_DataReceived
听众。通常,它正常工作。但每当我关闭serialPort1
并再次打开它时,它就会给我一个错误。
以下是听众:
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (connect)
{
for (int i = 0; i < (10000 * serialPort1.BytesToRead) / serialPort1.BaudRate; i++);
//Delay a bit for the serial to catch up
String comingValue = serialPort1.ReadExisting();
Console.WriteLine(comingValue);
String rslt = comingValue[0].ToString(); // This line give me an error
}
}
这是错误:
“System.IndexOutOfRangeException”类型的未处理异常 发生在WindowsFormsApplication1.exe
中
我检查comingValue
这两次都是11
。第一次它工作,但第二次它不起作用。我不知道为什么。如果有人知道原因,请帮助我。感谢。
答案 0 :(得分:1)
您应该检查字符串enc2utf8
。您正在尝试按索引读取第一个字符。当IsNullOrEmpty()
中没有数据时。您将获得超出范围的索引。只有在实际存在一个(或更多)
comingValue
使用这种延迟是一种不好的做法......
String comingValue = serialPort1.ReadExisting();
Console.WriteLine(comingValue);
String rslt = "";
if(!string.IsNullOrEmpty(comingValue))
rslt = comingValue[0].ToString();
这将在其他计算机上运行不同。试试for (int i = 0; i < (10000 * serialPort1.BytesToRead) / serialPort1.BaudRate; i++);
或其他什么。