Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测现有串行连接是否由于Windows上的设备拔出而丢失_Windows_Serial Port - Fatal编程技术网

检测现有串行连接是否由于Windows上的设备拔出而丢失

检测现有串行连接是否由于Windows上的设备拔出而丢失,windows,serial-port,Windows,Serial Port,我正在调用Win32 ReadFile从Windows串行端口读取。如果我的设备已拔出,ReadFile仍会返回成功。如何检查与设备的连接是否已断开?我可以通过发送消息而不获取响应或监听设备事件来实现这一点,但有没有更直接的方法?取决于语言,我不确定串行设备是否会导致设备更改事件,目前我没有要测试的事件 不过,如果PNP能把它捡起来,我会试试的 来自WmiCode创建者 Imports System Imports System.Management Imports System.Windows

我正在调用Win32 ReadFile从Windows串行端口读取。如果我的设备已拔出,ReadFile仍会返回成功。如何检查与设备的连接是否已断开?我可以通过发送消息而不获取响应或监听设备事件来实现这一点,但有没有更直接的方法?

取决于语言,我不确定串行设备是否会导致设备更改事件,目前我没有要测试的事件

不过,如果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
在此基础上,您可以进一步细化系统中添加或删除的内容。 然而,对于机器可能在没有连接设备的情况下启动这一事实,它几乎没有什么作用


无论哪种方式,我建议在所有通信协议中,正确的通信错误处理都是至关重要的。这与您无法保证套接字在检查是否已连接和写入之间已断开的事实类似。

串行端口是哑的,因为没有设备独立的方法来知道什么东西插入或未插入串行端口。因此,大多数使用串行端口的设备都支持某种通信协议,该协议允许您确定是否连接了某些设备。

检查DSR硬件信号。