我想自动检测连接到计算机COM端口的设备。能够使用SerialPort类可以轻松获取可用COM端口列表。
我想迭代它们并轮询(发送命令)到每个端口并等待响应。但是,似乎大多数教程都建议使用DataReceived事件。我迷失了如何进行串行发送,然后等待xx秒,直到我收到设备的响应。
答案 0 :(得分:3)
当您需要与可能在非常不可预测的时间发送内容的设备进行通信时,DataReceived事件非常好。您不必刻录只是阻塞并等待设备发送内容的线程。
但这与你正在尝试实现的完全相反,你做希望收到一些东西。因此,不要使用DataReceived,将Read()与ReadTimeout属性设置为适当的低值。现在很简单。还要考虑使用DsrHolding属性。当设备连接到端口并且已启动时,确实如此。
我应该注意到这样做很危险。你不知道什么样的设备连接到机器上,向它们发送它们不是为了处理它们的东西是相当棘手的。如果“你在哪里?”你发送的命令恰好意味着机器人控制器“以1G加速回家”然后有人会轻易受伤。你无法在任何工业环境中做到这一点。
到目前为止,最好的方法是让别人有责任做到这一点。添加一个选项菜单,允许用户设置端口名称。和设置一样,它们也很重要,并且没有办法自动检测它们。选项对话框可以有“帮我找到设备”按钮,现在它是安全的和有用。
答案 1 :(得分:0)
我相信WMI具有查询COM上的设备的功能,还有Linq to WMI库可能会有所帮助
希望这有帮助