private void HandleNewData(DataStream data) { if (data == null) { return; } var samples = data.AllSamples(); lock (m_samples) { foreach (var s in samples) { if (m_samples.ContainsKey(s.DataItemID)) { m_samples[s.DataItemID] = s; } else { m_samples.Add(s.DataItemID, s); } Task.Run(delegate { // raise the event on a thread so we don't slow down processing NewSample.Fire(this, new GenericEventArgs <ISample>(s)); }); } } lock (m_events) { var events = data.AllEvents(); foreach (var e in events) { if (m_events.ContainsKey(e.DataItemID)) { m_events[e.DataItemID] = e; } else { m_events.Add(e.DataItemID, e); } Task.Run(delegate { // raise the event on a thread so we don't slow down processing NewEvent.Fire(this, new GenericEventArgs <IEvent>(e)); }); } } lock (m_conditions) { var conditions = data.AllConditions(); foreach (var c in conditions) { if (m_conditions.ContainsKey(c.DataItemID)) { m_conditions[c.DataItemID] = c; } else { m_conditions.Add(c.DataItemID, c); } Task.Run(delegate { // raise the event on a thread so we don't slow down processing NewCondition.Fire(this, new GenericEventArgs <ICondition>(c)); }); } } }