Пример #1
0
 public void Close()
 {
     if (this.generator.NotNull())
     {
         this.Timer.Stop();
         this.generator.Close();
         this.generator = null;
     }
 }
Пример #2
0
        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);
        }