DataReceived
时间: 2023-10-20 08:30:31 浏览: 50
DataReceived事件是在接收到了一定数量的字符或文件结束字符,并将其放入输入缓冲区时被触发。这个事件可以用于处理串口接收到的数据。相比于轮询的方式,使用DataReceived事件可以更节省时间。可以通过设置ReceivedBytesThreshold的值来控制触发事件的条件,如果接收的是定长的数据,可以将ReceivedBytesThreshold设为接收数据的长度;如果接收数据的结尾是固定的字符或字符串,可以使用ReadTo方法或在DataReceived事件中判断接收的字符是否满足条件。为了避免在主线程中调用同步阻塞的读取数据方法,可以采用异步处理或线程间的处理调用这些方法。
在使用DataReceived事件的示例代码中,可以看到事件处理函数H_Decode_com_DataReceived。在这个函数中,通过判断接收到的字节数来决定是否处理接收到的数据。如果字节数大于等于13,则根据步骤的不同进行相应的处理。如果步骤为0,从串口读取6个字节,并根据条件判断进行后续处理;如果步骤大于0且字节数大于等于320,则从串口读取320个字节并进行后续处理。
由于C#的SerialPort提供的DataReceived事件在触发后会立即调用事件函数,不论之前的处理是否完成,所以在处理函数中需要保证快速执行完,避免下次触发事件时上一次还未执行完就开始处理。因此,最后改进的方法是每次只检查串口接收缓冲区存储的数据量,不在那里等待,直到满足数量要求后再取出来。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [c# 串口通信 DataReceived 事件触发方法的使用](https://blog.csdn.net/newbie_xymt/article/details/130974125)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]