C#port_DataReceived无法正常工作

时间:2015-11-30 22:29:25

标签: c# arduino serial-port

我有一个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。第一次它工作,但第二次它不起作用。我不知道为什么。如果有人知道原因,请帮助我。感谢。

1 个答案:

答案 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++); 或其他什么。