【发布时间】:2015-12-17 00:11:23
【问题描述】:
所以,我正在创建一个侦听串行端口的 VB.NET 程序。我正在使用这个
Dim WithEvents ptr_SerialPort As System.IO.Ports.SerialPort
...
ptr_SerialPort = My.Computer.Ports.OpenSerialPort(serialportname, baudrate,parity, databits, stopbits)
在我意识到我超出了我的 SerialPort.ReadBufferSize 属性(即 4096)并丢失了数据之前,它工作得很好:
https://msdn.microsoft.com/en-us/library/system.io.ports.serialport.readbuffersize(v=vs.110).aspx
所以我尝试如下增加缓冲区的大小
ptr_SerialPort = My.Computer.Ports.OpenSerialPort(serialportname, baudrate, parity, databits, stopbits)
ptr_SerialPort.ReadBufferSize = 2000000
但我收到错误“无法在打开时设置缓冲区大小”。这是合理的,所以我尝试了这个:
ptr_SerialPort = New System.IO.Ports.SerialPort(serialportname, baudrate, parity, databits, stopbits)
ptr_SerialPort.ReadBufferSize = 2000000
ptr_SerialPort.Open()
嗯,这会导致一个不接收数据的串行端口...我猜 My.Computer.Ports.OpenSerialPort 所做的不仅仅是实例化它,而我上面所拥有的是一个串行端口对象,它不是连接到我的硬件。所以,我的问题是...如何在我的 PC 上打开一个串行端口,并指定 ReadBufferSize 属性??
非常感谢!
【问题讨论】:
-
更环保的选择是不要全部更改,而是让您的程序一次处理块而不是一个大缓冲区
-
我觉得“环保”很有趣......但是我只实现了一个事件处理程序,没有那种控制,至少在方法上没有大的改变。我也无法控制发件人(此时),无法分块工作。所以首先我想增加我的缓冲区大小。我应该可以的。
-
串行通信与 UART 一起工作,并以适当的流控制在块中发送数据,无论是 c# 还是 c++;视窗; DOS 或 good-ol' Dragon 64 计算机。无需修改发件人即可使用块。
-
也尝试将其增加一个更合理的数量 2000000 有点过分。尝试 1028 的倍数
-
我正在寻找的是几行代码来设置 ReadBufferSize,仅此而已。
标签: c# vb.net serial-port