void framer_DoWork(object sender, DoWorkEventArgs e)
        {
            Stopwatch        sw     = new Stopwatch();
            BackgroundWorker worker = (BackgroundWorker)sender;

            while (!worker.CancellationPending)
            {
                int frameTime = (int)(1000 / (double)FPS);
                int delay     = frameTime;
                sw.Start();
                if (saveImages)
                {
                    byte[] frame = null;
                    this.Dispatcher.Invoke((Action)(() =>
                    {
                        frame = VideoControl.GetFrame((Scale / 100D), Quality);
                    }));
                    long   ticks = DateTime.Now.Ticks;
                    string name  = ticks + ".jpg";
                    worker.ReportProgress(0, new PushImage()
                    {
                        Image = frame, Name = name
                    });
                }
                sw.Reset();
                delay -= (int)sw.ElapsedMilliseconds;
                if (delay > 0)
                {
                    System.Threading.Thread.Sleep(delay);
                }
            }
        }
        void FrameRun()
        {
            try
            {
                Stopwatch sw = new Stopwatch();
                while (running)
                {
                    int frameTime = (int)(1000 / (double)FPS);
                    int delay     = frameTime;
                    if (saveImages)
                    {
                        sw.Start();
                        byte[] frame = null;
                        this.Dispatcher.Invoke((Action)(() =>
                        {
                            frame = VideoControl.GetFrame((Scale / 100D), Quality);
                        }));
                        long ticks = (long)DateTime.Now.ToUniversalTime().Subtract(
                            new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
                            ).Ticks;
                        string name = ticks + ".jpg";
                        lock (images)
                        {
                            images.Add(new PushImage()
                            {
                                Image = frame, Name = name
                            });
                        }

                        int elapsed = (int)sw.ElapsedMilliseconds;
                        sw.Reset();
                        delay -= elapsed;
                        if (delay < 0)
                        {
                            delay = 0;
                        }
                    }
                    System.Threading.Thread.Sleep(delay);
                }
            }
            catch (ThreadInterruptedException)
            {
                //
            }
            catch (Exception ee)
            {
                MessageBox.Show("Frame: " + ee.ToString());
                running = false;
            }
        }