Hidlibrary事件线程

时间:2015-07-16 07:21:03

标签: c# events hid

我正在使用mikeobriens HIDLibrary与我们制作的传感器进行通信。

这一切都正常,我有它所以重新枚举设备是否已拔下插头然后重新连接。

我遇到的问题是,每次重新连接时,都会创建一个新的HidLibrary.HidDeviceEventMonitor.DeviceEventMonitor工作线程,如果系统长时间运行,则会创建许多线程。如何在设备断开连接时终止这些线程?

2 个答案:

答案 0 :(得分:0)

我相信如果HidLibrary存在一种错误。

如果仔细观察HidDevice类,您可能会发现HidDevice.CloseDevice实际上并没有停止事件监视。

有两种方法可以修复它。 在您的应用程序中调用Dispose而不是CloseDevice:

//_device.CloseDevice(); - dispose will close device automatically
_device.Dispose();

或者在CloseDevice调用后将标志MonitorDeviceEvents设置为false:

_device.CloseDevice();
_device.MonitorDeviceEvents = false;

我更喜欢第一个。

N.B。另外,请确保您不要保留对已断开连接的设备的引用。

答案 1 :(得分:0)

这对我没有用,因为我正在使用阻塞调用Device.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 。 / p>