我正在使用serialport应用程序。而且我无法正确接收数据。我使用ReadExisting()来读取即将到来的数据。
这是我的代码。请告知,接收数据的正确方法是什么,以及如果我想检查每条消息的长度和格式的有效性。
public void serialport_connect(String port, int baudrate, Parity parity, int databits, StopBits stopbits)
{
DateTime dt = DateTime.Now;
String dtn = dt.ToShortTimeString();
sport = new System.IO.Ports.SerialPort(port, baudrate, parity, databits, stopbits);
try
{
sport.Open();
status.AppendText("[" + dtn + "] " + "Connected\n");
sport.DataReceived += new SerialDataReceivedEventHandler(sport_DataReceived);
}
catch (Exception ex) { MessageBox.Show(ex.ToString(), "Error"); }
}
private void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
DateTime dt = DateTime.Now;
String dtn = dt.ToShortTimeString();
String comingData = sport.ReadExisting();
if (comingData != String.Empty)
{
Dispatcher.Invoke(new Action(() =>
{
current.AppendText("[" + dtn + "] " + "Received: " + sport.ReadExisting() + "\n");
}));
}
}
谢谢。
答案 0 :(得分:2)
您的事件循环比以9600波特发送单个字符所需的时间快得多。我建议将收到的字符附加到一个字符串,直到你收到一个终止字符,如" \ n"或者你收到你期望的字符数。
这是一个项目中的例子,我等到收到10个字符:
int datalen = serialPort1.BytesToRead;
label1.Text="Readexisting";
if (datalen >=10)
{
string data = serialPort1.ReadExisting();
label1.Text=data;
}