c# - SerialPort.DiscarInBuffer():是否应该花一些时间让操作完成?
问题描述
请多多包涵。C# 中的串行端口处理对我来说一直是一个痛苦的话题,直到今天,我仍然遇到一些性能问题。
该方法
DiscardInBuffer()
部分丢弃Write()
方法的回复是否合理?
考虑这个原型函数:
void Write(string command)
{
lock(_locker)
{
mySerialPort.DiscardOutBuffer();
mySerialPort.DiscardInBuffer();
mySerialPort.Write(command);
}
}
我用它来向端口写一些东西。最初,在写入之前清除两个缓冲区似乎是个好主意。但是,我(经常)从设备中获取不完整的数据。
就我而言,设备通信很容易。我发送命令并收到回复,作为字符串,类似于“OK”或“NOT OK”。但是,我的应用程序的日志文件指出,有时我会得到“K”或“T OK”等。似乎有些数据丢失了。
我最好的猜测是性能提高了删除mySerialPort.DiscardInBuffer();
和使用mySerialPort.ReadExisting();
,这也意外地清除了缓冲区(通过 PowerShell 测试)。
我在想当写操作开始时缓冲区清除操作仍在进行中,因此,回复被部分丢弃。是否有意义?
我可以实施什么样的检查来继续mySerialPort.DiscardInBuffer();
在函数中使用,但确信事情不会丢弃回复?
解决方案
推荐阅读
- sass - 为什么 @use 在 Web Compiler Visual Studio 扩展中不起作用?
- performance - 8085 汇编程序的时钟周期和内存使用情况
- python-2.7 - Write rows from list to specific columns
- python-3.x - Python 3:将字符串添加到列表中的对象
- python - Python 默认语言环境(不支持的语言环境设置)
- angular - 配置 Angular 服务以在 AngularJS 模块单元测试中使用
- javascript - 从父组件接收数组并通过它映射的功能组件
- linux - 使用 ls 命令隐藏不可执行文件
- ios - iOS Swift 5 替换 segue 没有完全替换
- c# - Unity 2019.2.12f1 PlayerPrefs 停止脚本