private void Channel_ReceivedData(object sender, CANAnalyzerDevices.Devices.DeviceChannels.Events.ChannelDataReceivedEventArgs e) { if ((Status == RecieveState.Recieving) && (sender is IChannel ch) && (ch == Channel)) { MonitorChannelPageData data; lock (Items) { data = Items.FirstOrDefault(x => (x.CanId == e.Data.CanId) && (x.IsExtId == e.Data.IsExtId) && (x.DLC == e.Data.DLC)); if (data == null) { data = new MonitorChannelPageData(e.Data.CanId, e.Data.IsExtId, e.Data.DLC); _context.Send((s) => { Items.Add(data); }, null); } } data.SetPayload(e.Data.Payload, e.Data.Time); } }
private void Channel_ReceivedData(object sender, CANAnalyzerDevices.Devices.DeviceChannels.Events.ChannelDataReceivedEventArgs e) { if (RecieveState != RecieveState.Recieving || sender != Channel || currentTraceProvider == null) { return; } TraceModel model = new TraceModel() { Time = e.Data.Time, Payload = e.Data.Payload }; //проверка на существование такого же CanHeader'a List <CanHeaderModel> canHeaders; int filtersCount; lock (currentTraceProvider) { canHeaders = currentTraceProvider.CanHeaders.Where(x => (x.IsExtId == e.Data.IsExtId) && (x.CanId == e.Data.CanId) && (x.DLC == e.Data.DLC)).Take(1).ToList(); filtersCount = currentTraceProvider.CanHeaders.Where(x => (x.IsExtId == e.Data.IsExtId) && (x.CanId == e.Data.CanId)).Count(); //если такого CanHeader'a нет, то создаем, добавляем в БД if (canHeaders.Count == 0) { canHeaders.Add(new CanHeaderModel() { IsExtId = e.Data.IsExtId, CanId = e.Data.CanId, DLC = e.Data.DLC }); currentTraceProvider.Add(canHeaders[0]); lock (currentTraceProvider) { currentTraceProvider.SaveChanges(); } } //если появился новый CAN ID if (filtersCount == 0) { CanIdTraceFilter filter = new CanIdTraceFilter(e.Data.CanId, e.Data.IsExtId); filter.PropertyChanged += FilterIsActive_PropertyChanged; _context.Post((s) => { Filters.Add(filter); Filters = new BindingList <ITraceFilter>(Filters.OrderBy(x => x.ToString()).ToList()); }, null); } } model.CanHeader = canHeaders[0]; currentTraceProvider.Add(model); _context.Post((s) => { Items.Add(model); }, null); }