发布于 2021-08-02 15:23:56
正如你所认为的,可能有两种可能的方法。
一个是在.NET SerialPort API的范围内处理它。
为ReadBufferSize指定一个非常大的大小。可在规范中指定最多2GB。
缓冲区大小,以字节为单位。默认值为4096;最大值为正int,即2147483647。
如果以某种方式确定应用程序具有足够的处理能力,则将DtrEnable设置为true。如果您的应用程序做了一些繁重的事情,那么在此期间将DtrEnable设置为false。
无法执行诸如由设备驱动程序控制的及时处理,但如果缓冲区大小较大,则不太可能丢失数据。
如果通信协议规范定义了双向DTR/DSR握手,则在编写应用程序之前检查DsrHolding。
此属性用于数据集就绪/数据终端就绪(DSR/DTR)握手。数据集就绪(DSR)信号通常由调制解调器发送到端口,以表明它已准备好进行数据传输或数据接收。
另一种方法是使用P/Invoke调用Win32API的通信功能。
在由fDtrControl指定的DCB中有一个名为SetCommState的设置,可以指定DTR_CONTROL_HANDSHAKE。
fDtrControl DTR (数据终端就绪)流量控制.此成员可以是下列值之一。
如果您想在这里使用双向DTR/DSR握手,也可以指定fOutXDsrFlow。
fOutxDsrFlow 如果此成员为真,则监视DSR (数据集就绪)信号以进行输出流控制。如果该成员为TRUE,并且关闭了DSR,则将暂停输出,直到再次发送DSR为止。
如果设备驱动程序实现正确,则应启用DTR流控制。
但是,它不能在Windows以外的平台上使用,所有的串口处理(包括其他功能)都必须使用带有P/Invoke的Win32API。
例如,有一篇这样的文章。
但是,下载链接似乎已被禁用。也许是这样的。
类似的方法是使用C++/CLI中的C#通信函数API创建一个可以从Win32调用的库。
https://stackoverflow.com/questions/68619918
复制相似问题