有没有办法在c#中使用DataSent事件?

时间:2013-06-10 16:30:38

标签: c# serial-port interrupt

有没有办法在c#中发送数据(TX缓冲区为空或“UART传输完成”)事件,如同较低级别的语言一样?

这是大学项目的一部分,明确要求使用“UART发送完成”中断

1 个答案:

答案 0 :(得分:3)

操作系统确实有一个信号,WaitCommEvent()带有EV_TXEMPTY选项。但这根本没有暴露在SerialPort类中。你得到的是BytesToWrite属性,它告诉你在发送缓冲区中剩下多少字节。没有事件,你必须用计时器轮询它。

在SerialPort类中不暴露EV_TXEMPTY事件无疑是故意的,添加它会非常容易。该事件的问题在于,知道串行端口发生的任何事情都是无用的。它只说传输缓冲区为空,它说明端口是否完成发送数据。现代UART芯片在芯片上有一个缓冲区,通常为16字节深,在发送之前存储字节。用于降低中断开销并避免字节之间的间隙。根本没有 no 信号表明他的缓冲区也是空的。它从未添加到本机驱动程序界面。

完全不清楚为什么需要这个。消息很明确,您不需要这个。