public void Play(StateController stateController, View.Forms.HostForm hostForm) { int noSounds = this.melody.Count, skip = 0, maxPixel = 566, // we are sleeping a 10 seconds daily :) sleepTime = 4000 / maxPixel; for (int pixel = 0; pixel < maxPixel; pixel++) { // this is the position of next pair while (skip < noSounds) { KeyValuePair<Model.SoundPosition, Model.Sound> pair = this.melody.Skip(skip).First(); if (pair.Key.Position.Equals(pixel)) { pair.Value.SoundPlayer.Play(); skip++; } else { break; } } hostForm.MovePointer(pixel); System.Threading.Thread.Sleep(sleepTime); } stateController.MusicEnded(); }