是否有必要同步.NET SerialPort写入/读取?

Mik*_*ike 18 .net c# serial-port

在我的应用程序中,我使用.NET SerialPort类来读取和写入数据.使用DataReceived事件完成读取,我假设在ThreadPool线程内部.写作由UI线程(WinForms)完成.

我想知道,如果有必要同步对SerialPort实例的访问,那么不会同时发生读/写.我的良心告诉我,我应该锁定这些调用,但我很困惑,因为我在互联网上找到的所有C#SerialPort示例根本不使用锁定.

EJA*_*EJA 9

这是关于该主题的一个很棒的主题,SerialPort类的作者参与其中:

MSDN:SerialPort如何处理DataReceived?

根据我的经验,我已经编写了十几个串行通信应用程序用作硬件模拟器,我没有锁定.我当时不知道我是否安全,但在实践中,我还没有错误.(每年按20个+测试和自动化测试机附近持续使用)这就是说,我的应用程序不离开公司,如果我写了大众消费,我可能需要更多的关注应用程序.

  • 感谢您提供优质且信息丰富的链接 - 这是一个很好的发现.但我认为在制定像原始问题一样的设计决策时,不要过分依赖这些类型的实现细节.确切地知道事情是如何工作的,这很有趣也很好,但鉴于它没有正式记录,不能保证它会保持这种状态.文档(和最佳实践)建议你锁定,这样我就会做什么,除非这样做有一个特殊的*缺点*. (2认同)

wei*_*mat 5

从文档:

此类型 (SerialPort) 的任何公共静态(在 Visual Basic 中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。

所以你应该明确地用锁同步你的读/写。