C# Hidlibrary事件线程
我正在使用mikeobriens Hidder库与我们制造的传感器进行通信 这一切都在工作,我有它,所以它重新枚举,如果设备拔下,然后重新连接C# Hidlibrary事件线程,c#,events,hid,C#,Events,Hid,我正在使用mikeobriens Hidder库与我们制造的传感器进行通信 这一切都在工作,我有它,所以它重新枚举,如果设备拔下,然后重新连接 我遇到的问题是,每次重新连接时,都会创建一个新的HidLibrary.HidDeviceEventMonitor.DeviceEventMonitor工作线程,如果系统长时间像这样运行,就会创建许多线程。当设备断开连接时,我如何杀死这些线程?我相信如果HidLibrary出现了一种错误 如果仔细查看HidDevice类,您可能会发现HidDevice.C
我遇到的问题是,每次重新连接时,都会创建一个新的HidLibrary.HidDeviceEventMonitor.DeviceEventMonitor工作线程,如果系统长时间像这样运行,就会创建许多线程。当设备断开连接时,我如何杀死这些线程?我相信如果HidLibrary出现了一种错误 如果仔细查看HidDevice类,您可能会发现HidDevice.CloseDevice实际上并没有停止事件监视 有两种方法可以解决这个问题。 在应用程序中调用Dispose而不是CloseDevice:
//_device.CloseDevice(); - dispose will close device automatically
_device.Dispose();
或在CloseDevice调用后将MonitorDeviceEvents标志设置为false:
_device.CloseDevice();
_device.MonitorDeviceEvents = false;
我更喜欢第一个
注意:还要确保您没有保留对断开设备的引用 我相信如果隐藏库存在一种bug 如果仔细查看HidDevice类,您可能会发现HidDevice.CloseDevice实际上并没有停止事件监视 有两种方法可以解决这个问题。 在应用程序中调用Dispose而不是CloseDevice:
//_device.CloseDevice(); - dispose will close device automatically
_device.Dispose();
或在CloseDevice调用后将MonitorDeviceEvents标志设置为false:
_device.CloseDevice();
_device.MonitorDeviceEvents = false;
我更喜欢第一个
注意:还要确保您没有保留对断开设备的引用 这对我不起作用,因为我正在使用阻塞呼叫设备.ReadReport(AddressOf OnReport)。如果我只是简单地将设备设置为NULL(以消除引用),那么下一次扫描将抛出一个异常 为了解决这个问题,我做了如下工作:
Public Class myDevice
Private Device As HidDevice
Private isConnected as Boolean
Public Sub Close()
If Not Device Is Nothing Then
Device.CloseDevice()
Device.MonitorDeviceEvents = False
End If
isConnected = False
End Sub
Sub OnReport(Report As HidReport)
If isConnected = False Then
Device.Dispose()
Device = Nothing
Return
End If
' Do stuff with the data
' ...
' ...
' Wait for more data.
Device.ReadReport(AddressOf OnReport)
End Sub
End Class
因此,在关闭设备后,线程仍处于等待输入的状态。但是我设置了一个标志来指示设备已关闭(device.isConnected对我不起作用,因此我创建了自己的标志)。关闭的线程接收到的下一个事件检测到设备不再“连接”,因此它处理设备,取消引用设备,并返回,而不调用ReadReport这对我不起作用,因为我正在使用阻塞调用设备.ReadReport(AddressOf OnReport)。如果我只是简单地将设备设置为NULL(以消除引用),那么下一次扫描将抛出一个异常 为了解决这个问题,我做了如下工作:
Public Class myDevice
Private Device As HidDevice
Private isConnected as Boolean
Public Sub Close()
If Not Device Is Nothing Then
Device.CloseDevice()
Device.MonitorDeviceEvents = False
End If
isConnected = False
End Sub
Sub OnReport(Report As HidReport)
If isConnected = False Then
Device.Dispose()
Device = Nothing
Return
End If
' Do stuff with the data
' ...
' ...
' Wait for more data.
Device.ReadReport(AddressOf OnReport)
End Sub
End Class
因此,在关闭设备后,线程仍处于等待输入的状态。但是我设置了一个标志来指示设备已关闭(device.isConnected对我不起作用,因此我创建了自己的标志)。关闭线程接收到的下一个事件检测到设备不再“连接”,因此它处理设备,取消引用设备,并返回,而不调用ReadReport花点时间解释您的情况..发布您尝试过的代码…预期输出..Jagadeesh,代码是在HIDLibrary中提供的,未经修改。花点时间解释您的情况。发布您尝试过的代码…预期输出内容。Jagadeesh,代码是在HIDLibrary中提供的,未经修改。修复了它,谢谢修复了它,谢谢