public bool Open(Uri.Locator name) { bool result = false; if (name.Scheme == "file" && this.SupportedExtensions.Contains(name.Path.Extension)) { this.Buffer = Photo.Buffer.Abstract.Open(name); Kean.Math.Fraction rate = name.Query["rate"]; if (rate.Nominator <= 0) { rate = this.Rate; } this.Timer = new System.Timers.Timer(1000 / (float)rate); this.Duration = new TimeSpan((long)(10000 * 1000 / (float)rate)); this.Timer.Elapsed += (object sender, System.Timers.ElapsedEventArgs elapsedArguments) => { lock (this.signal) { System.Threading.Monitor.Pulse(this.signal); } }; result = true; this.Timer.Start(); } return(result); }
public bool Open(Uri.Locator name) { bool result = false; if (name.Scheme == "test" && this.generator.IsNull() && name.Authority.NotNull()) { this.generator = this.Generators.Find(generator => generator.Name == name.Authority.Endpoint.Host); if (this.generator.NotNull()) { this.generator.Open(name); Kean.Math.Fraction rate = name.Query["rate"]; if (rate.Nominator > 0) { this.Timer = new System.Timers.Timer(1000 / (float)rate); } else { this.Timer = new System.Timers.Timer(1000 / this.FramesPerSeconds); } this.Timer.Elapsed += (object sender, System.Timers.ElapsedEventArgs elapsedArguments) => { lock (this.signal) { if (this.generator.NotNull()) { this.Index = (this.Index + 1) % this.Count; } System.Threading.Monitor.Pulse(this.signal); } }; result = true; if (this is Stream && !(this is Linear)) { this.Timer.Start(); } } } return(result); }