只是想知道我們如何清除C#中串口的接收緩衝區。看起來好像接收緩衝區中的數據一直在積累。例如,輸入數據的流程是:[數據A],[數據B],[數據C]。我想要的數據只是[數據C]。 我正在考慮這樣做,當我收到[數據A]和[數據B]時,我做了一個明確的緩衝區。只有當收到[數據C]時,我才繼續處理。這是在C#中做到這一點的方式嗎?清除C#中的串口接收緩衝區#
10
A
回答
12
如果您使用的是System.IO.Ports.SerialPort
,那麼你可以使用這兩種方法:
DiscardInBuffer()
和DiscardOutBuffer()
刷新緩衝區。
如果你正在閱讀從串行端口的數據:
private void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!this.Open) return; // We can't receive data if the port has already been closed. This prevents IO Errors from being half way through receiving data when the port is closed.
string line = String.empty;
try
{
line = _SerialPort.ReadLine();
line = line.Trim();
//process your data if it is "DATA C", otherwise ignore
}
catch (IOException ex)
{
//process any errors
}
}
7
使用port.DiscardOutBuffer(); and port.DiscardInBuffer();
清除串行端口的緩衝區
2
您可以像使用
port.DiscardOutBuffer();
port.DiscardInBuffer();
port.Close();
port.DataReceived -= new SerialDataReceivedEventHandler(onDataReceived);
port = null;
2
有兩個緩衝器。一個緩衝區與串行端口相關聯,另一個緩衝區與其基本流相關聯,來自端口緩衝區的數據流入其中。 DiscardIn Buffer()只是從串口緩衝區中丟棄數據。基礎數據流中仍有數據,您將閱讀。因此,除了使用DiscardInBuffer之外,還可以使用SP.BaseStream.Flush()。現在你有一個乾淨的石板!如果您沒有獲取大量數據,只需刪除基本流:SP.BaseStream.Dispose()。
由於您仍然收到數據收到的事件,您可以閱讀它,而不會讓自己處於丟失數據的危險之中。
相關問題
- 1. 清除串行端口的緩衝區
- 2. 如何在接收多個字符串時清除緩衝區?
- 3. 如何清除WinSock中的接收緩衝區
- 4. 如何清除流串的緩衝區?
- 5. 如何清除串行緩衝區?
- 6. 如何「清除」Java DatagramSocket上的接收緩衝區?
- 7. 清除C#性能測試緩衝區?
- 8. C++清除輸入緩衝區
- 9. C緩衝區清除後繼續
- 10. 如何清除緩衝區?
- 11. Arduino清除緩衝區
- 12. 清除bash「源緩衝區」
- 13. 清除stdin緩衝區?
- 14. 清除輸入緩衝區
- 15. Unix:如何清除串口I/O緩衝區?
- 16. Rx緩衝Winsock Socket編程C++。如何清除RX緩衝區?
- 17. 如何清除(char *)中的緩衝區?
- 18. netty接收大緩衝區
- 19. TCP接收緩衝區
- 20. C# - 從串口緩衝區讀入
- 21. 在OpenGL中清除顏色緩衝區
- 22. 在ncurses中清除字段緩衝區
- 23. 在Ada中清除鍵盤緩衝區
- 24. C#如何手動清除TCP套接字緩衝區?
- 25. 緩衝區已滿時清除字符串緩衝區。這是什麼模式?
- 26. 沒有填充接收緩衝區的UDP緩衝區溢出?
- 27. 如何清除/清除VxWorks中的消息隊列緩衝區?
- 28. 在c中清理char緩衝區
- 29. 如何清除protobuf的緩衝區?
- 30. 在JavaScript的Websocket上清除緩衝區
你如何使用串口?你在使用'System.IO.Ports.SerialPort'嗎? – Dai 2012-07-20 01:15:33