如何自动检测串行 COM 端口 c# 的连接

Posted

技术标签:

【中文标题】如何自动检测串行 COM 端口 c# 的连接【英文标题】:How to autodetect connection of serial COM port c# 【发布时间】:2013-11-03 05:49:20 【问题描述】:

我有与设备通信的应用程序。设备通过串行 COM 端口连接。我的应用可以与设备通信。

我需要一些方法/事件,可以通过正在运行的应用程序扫描 COM 端口。当我将设备连接到 PC 时 - 方法/事件将打印带有消息“已连接”或类似内容的 MessageBox。

我发现了这样的东西:

comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

但它不起作用。

【问题讨论】:

【参考方案1】:

我不确定您是尝试自动检测设备连接到哪个端口,还是自动检测设备是否连接到特定端口。

但在这两种情况下,原理是相同的:

    如果您需要确定端口,请使用:SerialPort.GetPortNames 枚举串行端口,如果您已经知道端口,请跳至第 2 步 为集合中的每个端口创建一个新的SerialPort 对象并调用Open 来打开一个连接 对于您尝试从端口写入/读取的每个打开的连接,确定您的设备是否已连接的数据序列 对于每个打开的连接,如果数据读取超时,则没有设备连接到端口;否则,如果你得到你期望的结果,你就知道你的设备已经连接了 对于每个端口,使用SerialPort 对象上的Close 关闭连接。

在任何给定点执行上述操作将告诉您您的设备是否在该点连接,以及它连接到哪个端口。

如果您需要连续进行存在检测,那么您可能需要创建一个计时器并定期执行此测试(每 30 秒或每 2 分钟 - 取决于您愿意接受的延迟)。

注意

正如其他人在答案中指出的那样,您将希望异步运行串行端口检测代码,以免在扫描端口时阻塞您的主应用程序。由于未连接设​​备的端口超时,因此扫描肯定需要一段时间。

【讨论】:

你能帮我解决这个问题吗:***.com/questions/36589000/…

以上是关于如何自动检测串行 COM 端口 c# 的连接的主要内容,如果未能解决你的问题,请参考以下文章

如何将名称动态分配给 RFID 阅读器连接的串行端口

在 C# 中查找有关通过 USB 连接的所有串行设备的信息

C# COM 端口通信 - USB 到串行适配器的错误

在 C# 中,我如何监听已经打开的 COM(串行)端口?

BIOS串口3F8跟2E8是啥? 如何设置正确?

如何在 Windows 中获取 COM 端口的友好名称?