C# port_DataReceived 无法正常工作

C# port_DataReceived doesn't work correctly

我有一个 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
    }
}

这是错误:

An unhandled exception of type 'System.IndexOutOfRangeException' occurred in WindowsFormsApplication1.exe

我正在检查 comingValue 两次都是 11。第一次有效,但第二次无效。我不知道为什么。如果有人知道为什么,请帮助我。谢谢。

您应该检查字符串是否 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++);

这将 运行 在其他计算机上有所不同。试试 Thread.Sleep(10); 之类的。