public void refreshTrains() { lock (this) { if (!String.IsNullOrEmpty(id_)) { JArray tok = commander_.exec <JArray>("TrainInterface", "getTrains", true, id_); if (tok != null) { JEnumerable <JToken> children = tok.Children(); HashSet <string> seen = new HashSet <string>(); foreach (JToken child in children) { if (child is JObject) { string id = child["ID"].ToString(); seen.Add(id); Train train = null; if (trains_.Any(t => t.Id == id)) { train = trains_.First(t => t.Id == id); train.refresh(child); } else { train = new Train(commander_, child); trains_.Add(train); } } else { Debug.Print("Unexpected data in get all trains responce:\n{0}", child.ToString()); } } IEnumerable <Train> deleted = trains_.Where(t => !seen.Contains(t.Id)); //Debug.Print("Removed trains count {0}", deleted.Count()); foreach (Train old in deleted) { trains_.Remove(old); } Dictionary <string, int> routes = new Dictionary <string, int>(); foreach (Train train in trains_) { string loadSummary = train.Load.ToString(); if (routes.ContainsKey(loadSummary)) { routes[loadSummary] += 1; } else { routes.Add(loadSummary, 1); } } StringBuilder summary = new StringBuilder(); foreach (KeyValuePair <string, int> rt in routes) { if (summary.Length > 0) { summary.Append("\n"); } summary.Append(String.Format("{0} - {1}", rt.Key, rt.Value)); } RouteSummary = summary.ToString(); OnPropertyChanged("TrainList"); OnPropertyChanged("AvgReliability"); refreshWaggons(); } } } }