发送数据后启用串行端口数据接收事件



所以我正在与设备交谈,TX和RX引脚实际上是在内部连接在一起的。当我将数据发送到设备时,我看到我的SerialPort.DataReceived事件正在选取相同的数据。

我只想在发送数据后触发此事件。
我尝试在发送数据之前简单地取消订阅,然后在调用SerialPort.Write后订阅,但写入函数看起来是在单独的线程中处理的,所以我仍然收到数据,因为订阅会立即发生。

看起来没有我可以用来订阅的"DataSendComplete"类型的事件。有什么想法吗?

编辑:我试过添加

if (serialPort.BytesToWrite != 0)
            return;   

但是我猜在事件触发时所有数据都已经发送了。

没有办法可靠地做到这一点,你不可能得到正确的时机。 驱动程序将数据从传输缓冲区物理传输到 UART 的确切时间以及 UART 在 FIFO 中传输字节的确切时间无法在用户模式程序中确定。 只有司机会有机会,它没有这个选项。

您需要查找一个选项来关闭设备中的回声,例如 ATE0 命令(如果此设备使用 Hayes 命令集)。 或者只是丢弃在 DataReceived 事件处理程序中发送的字节数。

最新更新