我正在调用Win32 ReadFile来从Windows串口读取。如果我的设备已拔下,ReadFile仍会返回成功。如何检查与设备的连接是否丢失?我可以通过发送消息而不是获得响应或监听设备事件来做到这一点,但还有更简单的方法吗?
答案 0 :(得分:2)
串行端口是愚蠢的,因为没有设备独立的方式知道何时插入或未插入串行端口。因此,大多数使用串行端口的设备都支持某种通信协议,这样可以确定是否有连接。
答案 1 :(得分:0)
取决于语言,我不确定串口设备是否会导致设备更改事件,而我目前还没有测试。
但是如果PNP会拿起它,我会尝试
来自WmiCode创建者
Imports System
Imports System.Management
Imports System.Windows.Forms
Namespace WMISample
Public Class WMIReceiveEvent
Public Overloads Shared Function Main() As Integer
Try
Dim query As New WqlEventQuery( _
"SELECT * FROM Win32_DeviceChangeEvent")
Dim watcher As New ManagementEventWatcher(query)
Console.WriteLine("Waiting for an event...")
Dim eventObj As ManagementBaseObject = watcher.WaitForNextEvent()
Console.WriteLine("{0} event occurred.", eventObj("__CLASS"))
' Cancel the event subscription
watcher.Stop()
Return 0
Catch err As ManagementException
MessageBox.Show("An error occurred while trying to receive an event: " & err.Message)
End Try
End Function
End Class
End Namespace
从那里你可以进一步细化从系统中添加或删除的内容。 但是,在没有连接设备的情况下机器可能已经启动的情况很少。
无论哪种方式,我建议在所有通信协议中,正确的通信错误处理是必不可少的。它类似于以下事实:您无法保证在检查连接和写入之间是否断开套接字。