我已经在VS2008 Express中设置了一个SerialDataReceivedEventHandler,它带有一个基于表单的程序。我的串行端口设置如下:C#.Net Serial DataReceived对于高速率数据,事件响应速度太慢
115200,8N1
DTR和RTS启用
ReceivedBytesThreshold = 1
我有我与通过蓝牙,USB转串口接口的设备。超级终端在任何数据速率下都可以很好地接收数据。数据以22字节长的数据包定期发送。该设备具有可调整的数据发送速率。在低数据速率,10-20Hz时,下面的代码工作良好,没有问题。但是,当我将数据速率提高到25Hz时,就开始在一次呼叫中接收多个数据包。我的意思是,每个传入数据包都应该有一个事件触发器。在更高的输出速率下,当事件被调用时,我立即测试了缓冲区大小(BytesToRead命令),然后缓冲区中有多个数据包。我认为这个事件缓慢发作,并且在达到代码时,更多的包装已经冲击缓冲区。我做的一个测试是查看事件每秒触发多少次。在10Hz时,我得到10个事件触发器,真棒。在100Hz时,我得到了40个事件触发器,不太好。我的目标数据速率是100HZ是可以接受的,200Hz的首选,和300Hz的最佳。这应该可以工作,因为即使在300Hz时,也就是52800bps,不到波特率115200的一半。我在看什么?
public Form1()
{
InitializeComponent();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
this.Invoke(new EventHandler(Display_Results));
}
private void Display_Results(object s, EventArgs e)
{
serialPort1.Read(IMU, 0, serial_Port1.BytesToRead);
}
我试着删除Invoke()调用,并直接在DataReceived()事件中读取数据,结果相同。对不起,有点天真,但你能告诉我更多关于你如何排队的原因,以及为什么这样工作更快。谢谢您的帮助。 – Matthew 2010-06-02 05:52:15