我正在通过串口通信从arduino读取C#中的字符串。我正在使用ReadLine()
为传入数据设置字符串。但是,我注意到ReadLine()
减慢了我的数据接收速度,当使用控制台时,我可以看到在接收数据和输出数据之间开始出现延迟。
问题
当字符串的大小可变时,是否有快速的方法从串行读取到一个字符串?我需要能够处理字符串,重要的是我不会在读取之间丢失数据。我的数据使用格式<ID,Name,Data>
,每个格式都在各自的行上。有什么方法可以在<
和>
之间阅读吗?
当前代码
private void Form1_Shown(object sender, EventArgs e)
{
serialPort1 = new SerialPort(comboPorts.SelectedItem.ToString(), 115200);
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.Open();
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string inData = serialPort1.ReadLine();
Console.WriteLine(inData);
}
答案 0 :(得分:2)
从串行连接读取数据时发出DataReceived事件,当您收到事件时,您应该从缓冲区中读取所有可用数据。
我的猜测是因为你调用ReadLine而发生减速,但缓冲区中有多行。在添加更多数据之前,您不会读取第二行。 (即第3,第4或第5行)你经常落后。
也许你可以重新设计一个线程来读取行,而不是从事件中读取。
private void Form1_Shown(object sender, EventArgs e)
{
serialPort1 = new SerialPort(comboPorts.SelectedItem.ToString(), 115200);
serialPort1.Open();
Thread t = new Thread(ReadThread);
t.Start(serialPort1);
}
private void ReadThread(object context)
{
SerialPort serialPort = context as SerialPort;
while (serialPort.IsOpen)
{
string inData = serialPort.ReadLine();
Console.WriteLine(inData);
}
}