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

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

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

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

MSDN:SerialPort如何处理DataReceived?

根据我的经验,我已经编写了十几个串行通信应用程序用作硬件模拟器,我没有锁定。 我当时不知道我是否安全,但在实践中,我还没有错。 (20多个测试人员和自动测试机器几乎不断使用的一年)也就是说,我的应用程序不会离开公司,如果我正在为公共消费编写应用程序,我可能会更加小心。

从文档:

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

因此,您应该确定将读/写与锁同步。