【发布时间】:2018-09-01 20:53:13
【问题描述】:
我正在尝试使用波特率 9600 通过串行端口读取从我的 Arduino 发送的消息。
我的 Arduino 代码被编程为每当我按下按钮时发送一个“1”,当我松开手指时发送一个“0”。
所以它不是不断发送数据。
我的 C# 程序是读取该消息并将其添加到 ListBox。但是每当我启动它时,程序就会挂起。
private void button1_Click(object sender, EventArgs e)
{
SerialPort port = new SerialPort();
port.BaudRate = 9600;
port.PortName = "COM4";
port.ReadTimeout = 1000;
port.Open();
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
try
{
ee = port.ReadLine();
listBox1.Items.Add(ee);
}
catch (Exception)
{
timer1.Stop();
}
}
我猜,可能是我的程序在接收之前应该检查是否有数据可以接收?
【问题讨论】:
-
ReadLine读取直到流中有行终止符 (\n)。根据您的描述,您的设备似乎从不输出此类终止符,因此ReadLine会永远阻塞。 -
在流设备(如串口)中使用
ReadLine不是一个好主意,因为它会冻结程序(当没有完成的'行',或者在全部)。使用DataReceived事件确保有数据,使用ReadExisting代替。
标签: c# arduino serial-port readline