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);
之类的。
我有一个 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);
之类的。