检测现有串行连接是否由于Windows上的设备拔出而丢失
我正在调用Win32 ReadFile从Windows串行端口读取。如果我的设备已拔出,ReadFile仍会返回成功。如何检查与设备的连接是否已断开?我可以通过发送消息而不获取响应或监听设备事件来实现这一点,但有没有更直接的方法?取决于语言,我不确定串行设备是否会导致设备更改事件,目前我没有要测试的事件 不过,如果PNP能把它捡起来,我会试试的 来自WmiCode创建者检测现有串行连接是否由于Windows上的设备拔出而丢失,windows,serial-port,Windows,Serial Port,我正在调用Win32 ReadFile从Windows串行端口读取。如果我的设备已拔出,ReadFile仍会返回成功。如何检查与设备的连接是否已断开?我可以通过发送消息而不获取响应或监听设备事件来实现这一点,但有没有更直接的方法?取决于语言,我不确定串行设备是否会导致设备更改事件,目前我没有要测试的事件 不过,如果PNP能把它捡起来,我会试试的 来自WmiCode创建者 Imports System Imports System.Management Imports System.Windows
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
在此基础上,您可以进一步细化系统中添加或删除的内容。
然而,对于机器可能在没有连接设备的情况下启动这一事实,它几乎没有什么作用
无论哪种方式,我建议在所有通信协议中,正确的通信错误处理都是至关重要的。这与您无法保证套接字在检查是否已连接和写入之间已断开的事实类似。串行端口是哑的,因为没有设备独立的方法来知道什么东西插入或未插入串行端口。因此,大多数使用串行端口的设备都支持某种通信协议,该协议允许您确定是否连接了某些设备。检查DSR硬件信号。