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

时间:2010-12-10 15:35:23

标签: c# .net serial-port

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

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

2 个答案:

答案 0 :(得分:9)

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

MSDN: How does SerialPort handle DataReceived?

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

答案 1 :(得分:4)

来自文档:

  

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

所以你应该用锁来确定你的读/写同步。