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

Mar*_*iel 2 c# wpf serial-port event-handling

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

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

我找到了这样的东西:

comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Mik*_*scu 8

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

但在这两种情况下,原则都是一样的:

  1. 如果需要确定端口,则使用以下命令枚举串行端口:SerialPort.GetPortNames;如果已经知道端口,则跳至步骤2
  2. 对于集合中的每个端口,您可以通过为其创建新SerialPort对象并通过调用Open来打开连接
  3. 对于每个打开的连接,您尝试从端口写入/读取确定您的设备是否已连接的数据序列
  4. 对于每个打开的连接,如果数据读取超时,则没有设备连接到端口; 否则,如果你回到你所期望的,你知道你的设备是附加的
  5. 对于每个端口,使用对象上的Close关闭连接SerialPort.

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

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

注意

正如其他人在答案中指出的那样,您将需要异步运行串行端口检测代码,以免在扫描端口时阻止主应用程序.由于没有连接设备的端口超时,扫描保证需要一段时间.