public void Close() { if (this.generator.NotNull()) { this.Timer.Stop(); this.generator.Close(); this.generator = null; } }
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); }