using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace HidLibrary { internal class HidDeviceEventMonitor { public delegate void InsertedEventHandler(); public delegate void RemovedEventHandler(); private readonly HidDevice _device; private bool _wasConnected; public event InsertedEventHandler Inserted; public event RemovedEventHandler Removed; public HidDeviceEventMonitor(HidDevice device) { _device = device; } public void Init() { Action action = DeviceEventMonitor; action.BeginInvoke(DisposeDeviceEventMonitor, action); } private void DeviceEventMonitor() { bool isConnected = _device.IsConnected; if (isConnected != _wasConnected) { if (isConnected && this.Inserted != null) { this.Inserted(); } else if (!isConnected && this.Removed != null) { this.Removed(); } _wasConnected = isConnected; } Thread.Sleep(500); if (_device.MonitorDeviceEvents) { Init(); } } private static void DisposeDeviceEventMonitor(IAsyncResult ar) { ((Action)ar.AsyncState).EndInvoke(ar); } } }