C# 什么时候应该放弃SerialPort的in和/或out缓冲区?

C# 什么时候应该放弃SerialPort的in和/或out缓冲区?,c#,multithreading,serial-port,C#,Multithreading,Serial Port,我在C应用程序中使用System.IO.Ports.SerialPort类时遇到了一些小问题。我目前已经在SerialPort类的基础上编写了一个线程安全类,并且在读写过程中遇到了一些问题,这些问题发生的时间很短 例如,我可以编写一个命令,然后读取一个响应。这种行为在lock语句中,一旦锁释放,我可能会进行一次写操作,然后进行另一次写-读操作。在第二次阅读时,我有时会收到一个空字符串 这只是概述我的问题,但试图提出一个可以回答的问题。我只是想知道你什么时候应该使用DiscardeBuffer和D

我在C应用程序中使用System.IO.Ports.SerialPort类时遇到了一些小问题。我目前已经在SerialPort类的基础上编写了一个线程安全类,并且在读写过程中遇到了一些问题,这些问题发生的时间很短

例如,我可以编写一个命令,然后读取一个响应。这种行为在lock语句中,一旦锁释放,我可能会进行一次写操作,然后进行另一次写-读操作。在第二次阅读时,我有时会收到一个空字符串

这只是概述我的问题,但试图提出一个可以回答的问题。我只是想知道你什么时候应该使用DiscardeBuffer和DiscardeInBuffer?基本上,关于何时使用这些函数有什么约定吗?此外,在底层SerialPort实现中是否会自动丢弃缓冲区


我必须假设我的问题在于缓冲区。要么缓冲区中的内容过早丢弃,要么缓冲区中的内容未及时清除。

决不是99.9%的正确答案。从技术上讲,它们可以用于实现协议重置以从通信错误中恢复。但前提是协议明确要求,并且有人已经考虑了后果。必须使用锁是非常可疑的,并且是一个很好的线索,因为您的代码与端口流量不同步。添加日志记录,以便记录发生的情况。假设另一端的设备没有故障,并且速度不超过1Mbps,则不应该出现问题。@HansPassant能否解释一下为什么使用锁是可疑的?//SerialPort读写方法不是线程安全的,我对它们进行了锁定,这样两个单独的任务就不会在另一个任务当前处于线程安全状态时尝试读写端口。这很可疑,因为很容易出错。从你所做的声音来看,当另一个线程的写操作仍在等待响应时,你不能允许一个线程调用Read。我仍然不相信我会这样做。例如,我可以使用lockmobj{Writemsg;String resp=ReadLine;}。另一个试图执行lockmyObj{Writemsg;}的线程不可能将其写操作与第一个读写操作交错?它将被阻止,直到第一个线程读写完成,然后锁将被释放,第二个线程可以进入。