private void Update() { if (InternalEnabled) { Action ApplyLoop = delegate { InternalLoop.Apply( (Source, Retry) => { var Music = Source.ToSound(); Music.PlaybackComplete += Retry; Music.SetVolume(this.Volume); Music.Start(); InternalLoopSetVolume = Music.SetVolume; InternalLoopStop = delegate { InternalLoopSetVolume = null; Music.Stop(); }; } ); }; if (LoopStarted != null) { LoopStarted(); } Update_LoopStarted = true; // start if (!string.IsNullOrEmpty(this.Start)) { var StartMusic = this.Start.ToSound(); StartMusic.SetVolume(this.Volume); StartMusic.Start(); if (!string.IsNullOrEmpty(InternalLoop)) { if (StartDelay > 0) { StartDelay.AtDelay(ApplyLoop); } else { ApplyLoop(); } } } else { if (!string.IsNullOrEmpty(InternalLoop)) { ApplyLoop(); } } } else { if (Update_LoopStarted) { Action StopLoop = delegate { if (InternalLoopStop != null) { InternalLoopStop(); InternalLoopStop = null; } }; if (!string.IsNullOrEmpty(this.Stop)) { var StopMusic = this.Stop.ToSound(); StopMusic.SetVolume(this.Volume); StopMusic.Start(); if (!string.IsNullOrEmpty(InternalLoop)) { if (StopDelay > 0) { StopDelay.AtDelay(StopLoop); } else { StopLoop(); } } StopMusic.PlaybackComplete += delegate { if (LoopStopped != null) { LoopStopped(); } }; } else { StopLoop(); if (LoopStopped != null) { LoopStopped(); } } } } }
public static void TimetableFromCsv(object sender, DoWorkEventArgs e) { DateTime ThresholdDate = new DateTime(2010, 1, 1); if (DataContainer.model == null) { DataContainer.model = new railml(); } DataContainer.model.timetable = new timetable(); Dictionary <string, int> categories = new Dictionary <string, int>(); string filename = e.Argument as string; BackgroundWorker worker = sender as BackgroundWorker; CsvDefinition def = new CsvDefinition() { FieldSeparator = ',' }; CsvFileReader <TimetableEntry> reader = new CsvFileReader <TimetableEntry>(filename, def); int count = 0; RuntimeRep rep = new RuntimeRep(); List <StopDelay> stopdelays = new List <StopDelay>(); string traincode = ""; foreach (TimetableEntry entry in reader) { if (entry.TrainDate < ThresholdDate) { count++; continue; } string category = entry.TrainOrigin + "to" + entry.TrainDestination; if (categories.ContainsKey(category)) { categories[category] = (int)categories[category] + 1; } else { categories.Add(category, 1); //eCategory cat = new eCategory(); //cat.id = category; //cat.name = category; //DataContainer.model.timetable.categories.Add(cat); //eRostering roster = new eRostering(); //DataContainer.IDGenerator(roster); //roster.name = category; //DataContainer.model.timetable.rosterings.Add(roster); } if (entry.TrainDate != date || entry.TrainCode != traincode) { AddStopDelays(stopdelays, traincode, date); stopdelays = new List <StopDelay>(); if (rep.traincode != null) { trainvariations.AddRep(rep, date); } if (entry.TrainCode != traincode) { if (trainvariations != null) { string cat = categories.FirstOrDefault(x => x.Value == categories.Values.Max()).Key; trainvariations.category = cat; categories = new Dictionary <string, int>(); if (!DataContainer.model.timetable.rosterings.Any(x => x.name == cat)) { eRostering roster = new eRostering() { name = cat, scope = "scheduled" }; DataContainer.IDGenerator(roster); DataContainer.model.timetable.rosterings.Add(roster); } ProcessTimetableVariations(trainvariations); } trainvariations = new TrainVariations(); trainvariations.traincode = entry.TrainCode; worker.ReportProgress(0, new string[] { traincode, count.ToString() }); traincode = entry.TrainCode; } rep = new RuntimeRep(); date = entry.TrainDate; rep.traincode = entry.TrainCode; rep.destination = entry.TrainDestination; rep.origin = entry.TrainOrigin; } if (entry.LocationType == "O") { rep.departuretime = default(DateTime).Add(entry.ScheduledDeparture.TimeOfDay); } else if (entry.LocationType == "D") { rep.arrivaltime = default(DateTime).Add(entry.ScheduledArrival.TimeOfDay); } else if (entry.LocationType == "S") { Stop stop = new Stop() { location = entry.LocationCode, arrival = entry.ScheduledArrival, departure = entry.ScheduledDeparture }; rep.stops.Add(stop); if (entry.Arrival != default(DateTime) && entry.Departure != default(DateTime)) { StopDelay delay = new StopDelay() { location = entry.LocationCode, departuredelay = (entry.Departure - entry.ScheduledDeparture).TotalSeconds, arrivaldelay = (entry.Arrival - entry.ExpectedArrival).TotalSeconds }; stopdelays.Add(delay); } } //if (count > 300000) { break; } count++; } // Append the last trainvariation to the totalvariations list if (trainvariations != null) { string cat = categories.FirstOrDefault(x => x.Value == categories.Values.Max()).Key; trainvariations.category = cat; categories = new Dictionary <string, int>(); ProcessTimetableVariations(trainvariations); if (!DataContainer.model.timetable.rosterings.Any(x => x.name == cat)) { eRostering roster = new eRostering() { name = cat, scope = "scheduled" }; DataContainer.IDGenerator(roster); DataContainer.model.timetable.rosterings.Add(roster); } } e.Result = unhandled; }