void tracker_DetectorsReceived(object sender, SonitorEventArgs e) { var msg = (DetectorsMessage)e.Message; DataReceived(this, new DataEventArgs(msg)); foreach (var det in msg.Detectors) { bool updated = false; Detectors.AddOrUpdate(det.HostName, det, (k, v) => { Detectors[det.HostName] = det; DetectorStateChanged(this, new DetectorEventArgs(Detectors[det.HostName])); updated = true; return(det); } ); if (!updated) { DetectorAdded(this, new DetectorEventArgs(Detectors[det.HostName])); } } }