所以我正在与设备通信,而TX和RX引脚实际上是内部连接在一起的。
当我向设备发送数据时,我看到我的SerialPort.DataReceived
事件正在拾取相同的数据。
我希望只在数据发送后触发此事件
我在发送数据之前尝试过简单取消订阅,然后在调用SerialPort.Write
时订阅,但是write函数看起来是在一个单独的线程中处理的,所以我仍然会收到数据,因为订阅会立即发生。
我可以使用订阅的“DataSendComplete”类型的事件。 有任何想法吗?
编辑:我尝试添加
if (serialPort.BytesToWrite != 0)
return;
但是,我猜测事件触发时已经发送了所有数据。
答案 0 :(得分:1)
没有办法可靠地做到这一点,你不可能得到正确的时机。驱动程序将数据从发送缓冲区物理地传输到UART的确切时间以及UART在FIFO中传输字节的确切时间无法在用户模式程序中确定。只有司机会对它进行拍摄,而且没有这个选项。
如果此设备使用Hayes命令集,您需要在设备中查找关闭回声的选项,如ATE0命令。或者只是丢弃您在DataReceived事件处理程序中发送的字节数。