Aforge Net работа с ProgressBar

288
04 октября 2017, 06:53

Здравствуйте, проигрывается стандартный плеер Aforge, задается обработчик создания нового кадра

 this.videoSourcePlayer.VideoSource = null;
 this.videoSourcePlayer.NewFrame += new AForge.Controls.VideoSourcePlayer.NewFrameHandler(this.videoSourcePlayer_NewFrame);

На форме стоит стандартный Progressbar.

    private void buttonVideo_Click(object sender, EventArgs e)
    {
        //ourTimer.Enabled = true;
        //ourTimer.Start();
        //ourTimer.Interval = 1000 * checkedListBoxMedia.Items.Count * 12 * 3 / 25;
        progressBar1.Value = 0;
        progressBar1.Maximum = 100 * checkedListBoxMedia.Items.Count;
        progressBar1.Step = 25;
        //progressThread.Start();
        //ourTimer.Tick += new System.EventHandler(timer_Tick);           
        OpenVideoSource(medialist);
    }

Далее в обработчике такой код:

  // New frame received by the player
    private void videoSourcePlayer_NewFrame(object sender, ref Bitmap image)
    {
        frameNumber++;
        //Added progress          
        BeginInvoke((MethodInvoker)
        delegate
        {
            if ((progressBar1.Value != progressBar1.Maximum) && (frameNumber % progressBar1.Step == 0))
            {
                //progressBar1.Value += progressBar1.Step;
                progressBar1.PerformStep();
            }
        });
        //BeginInvoke((MethodInvoker)
        //    delegate
        //    {
        //        OnProgressChange();
        //    });
        if (frameNumber == 100)
        {
            //Painting
            Bitmap bitmap = image;
            bitmap.Save(videoNumber.ToString() + frameNumber.ToString() + ".jpeg", ImageFormat.Jpeg);
            VideoPictures.Add(videoNumber.ToString() + frameNumber.ToString() + ".jpeg", videoSourcePlayer.VideoSource.Source);
            if (frameNumber == 100)
            {
                BeginInvoke((MethodInvoker)
                //Invoke((MethodInvoker)!!!
                     delegate
                     {
                         CloseCurrentVideoSource();
                     });
            }
        }
        DateTime now = DateTime.Now;
        Graphics g = Graphics.FromImage(image);
        ////Painting 
        // paint current time
        SolidBrush brush = new SolidBrush(Color.Red);
        g.DrawString(now.ToString(), this.Font, brush, new PointF(5, 5));
        brush.Dispose();
        g.Dispose();
    }

В секунду примерно предполагается обработка 25 кадров, т.е каждую секунду расчитываю на визуальное изменение значения Progressbar. Однако вместо этого происходит все не так - значение Progressbar изменяется не плавно, по шагам в единицу времени, а в конце обработки, сразу. Прошу помощи, спасибо

READ ALSO
С# TextBox WindowsForm

С# TextBox WindowsForm

Доброго времени суток, подскажите как присвоить переменной значение записанное мною в textbox

313
Как написать метод, который будет выполняться перед каждым другим методом?

Как написать метод, который будет выполняться перед каждым другим методом?

Есть метод A и методы B,С,D,EНужно метод A выполнить перед каждым методом B,С,D,E, когда они будут запускаться и если метод A будет false, то выйти и не выполнять...

275
Два экземпляра класса при обработке как-бы “склеиваются”

Два экземпляра класса при обработке как-бы “склеиваются”

Здравствуйте, в классе (C) создаются и используются два экземпляра класса-наследника (B : A), поля класса (C) взаимодействуют с парой публичных...

287