// Fired when received data - or device disconnected private void OnReadReport(HidReport report) { lock (ReadLock) { // process your data here byte len = report.Data[0]; if (len > 0) { byte[] buf = new byte[len]; for (int i = 0; i < len; i++) { buf[i] = report.Data[i + 1]; } packetsIn.Add(buf); OnNewIncommingData(new EventArgs()); } // we need to start listening again for more data if (_selectedDevice != null && _selectedDevice.IsConnected) { try { _selectedDevice.ReadReport(OnReadReport); } catch { } } } }