针对小数据块的c#串行端口刷新

针对小数据块的c#串行端口刷新,c#,serial-port,flush,C#,Serial Port,Flush,我正在编写一个由两个字节组成的小字节数组,使用如下内容: int bytes_to_write = 2; port.Write(byte_buffer, buffer_offset, bytes_to_write); 底层库似乎在等待更多数据通过后再将其写入端口。这是正确的行为吗?我可以强迫它立即写入小数据块吗?一些论坛说使用: port.BaseStream.Flush(); 将导致正确的行为,但其他人说这不起作用。我已经做了几次测试,但它似乎对我不起作用 干杯, Richard您确定数

我正在编写一个由两个字节组成的小字节数组,使用如下内容:

int bytes_to_write = 2;
port.Write(byte_buffer, buffer_offset, bytes_to_write);
底层库似乎在等待更多数据通过后再将其写入端口。这是正确的行为吗?我可以强迫它立即写入小数据块吗?一些论坛说使用:

port.BaseStream.Flush(); 
将导致正确的行为,但其他人说这不起作用。我已经做了几次测试,但它似乎对我不起作用

干杯, Richard

您确定数据没有写入端口吗?我已经广泛地处理了
SerialPort
模块,并且很好地写出了单个字节。应该不需要调用
Flush()

端口后使用调试器设置断点。编写
调用并检查
端口
对象。
BytesToWrite
属性是否为
>0


编辑:另外,确保
缓冲区偏移量
参数为
0

这将写入串行端口驱动程序传输缓冲区,无需任何额外帮助。不需要冲洗。如果它不能进入设备,那么你可能会遇到握手问题。一个典型的错误是将其设置为None,而没有将DtrEnable和RtsEnable属性设置为true


这也可能是一个布线问题,通过使用另一个程序,如超级终端或Putty,来解决这个问题。最后但并非最不重要的一点:调试代码时使用超时的设备很难让人满意

我也有类似的情况。我试着在从c#到Arduino板的串行端口上写东西。 我可以写入串行端口,但只有在关闭和打开端口后才能最终发送数据。我尝试了几种设置,可能会对你有所帮助。DtrEnable当然是最重要的一个

port.Handshake = Handshake.None;
port.Open();
port.DiscardInBuffer();
port.DiscardOutBuffer();
port.DtrEnable = true;                

我正在使用PortMon观看它,它正在被写出来,但随着下一批数据的出现,是否有任何设置会让它等待?您是说在
Write()
之前添加延迟?您可以使用
Thread.Sleep
,因为我正在从数据流中读取数据,并将其写入串行端口。端口上的硬件需要2个字节并超时。我和port mon一起查看发生了什么,接下来的大量数据似乎都出现了。你能详细说明一下吗。是否写入了两个字节,但硬件以四个字节或更多字节的块显示数据?您可能需要更改波特率,或在每次写入之前添加
线程.Sleep()
延迟()
。您可以帮助我。谢谢