private void ProcessRecordData(UsbDataReceiveEventArgs e) { lock (_ringBuffer) { _ringBuffer.Put(e.Data, 0, e.Data.Length); bool found = true; int start = Find(Begin1); ArrayList arr = new ArrayList(); while (found) { int count = _ringBuffer.Count(); found = start >= 0 && count > start + 2 + DataLength && _ringBuffer.ElementAt(start + 1) == Begin2; if (found) { var len = start + DataLength + 2; var data = new byte[len]; _ringBuffer.Get(data, 0, len); foreach (var channel in this.Channels.Where(c => c.IsRecording)) { //channel.AddData(data[start + 2 + channel.Index]); channel.AddData(data[start + 2 + channel.CurrentPOId]); } start = Find(Begin1); } } } }
void UsbReader_OnDataReceived(object sender, UsbDataReceiveEventArgs e) { this.LastReceived = DateTime.Now; if (this.Channels.Any(c => c.IsRecording)) { Action <UsbDataReceiveEventArgs> act = new Action <UsbDataReceiveEventArgs>(ProcessRecordData); act.BeginInvoke(e, null, null); //ProcessRecordData(e); } else if (_ringBuffer.Count() > 0) { _ringBuffer.Clear(); } }