Меняйте изображение в картинке каждую секунду C # - PullRequest
4 голосов
/ 21 июня 2011

Я создаю приложение WinForm, которое делает фотографию человека с помощью веб-камеры, и сейчас пытаюсь создать эффект обратного отсчета. У меня есть 4 изображения, которые я хотел бы просмотреть, но это довольно сложно сделать.

Я использую таймер для секунд, но все, что происходит, - приложение немного отстает, а затем отображается последнее изображение. Кто-нибудь знает, как мне это сделать?

Вот мой код:

        int counter = 0;
        // start the counter to swap the images
        tmCountDown.Start();
        while (counter < 4)
        {
            // holding off picture taking
        }
        // reset counter for timer
        counter = 0;
        tmCountDown.Stop();

    /// <summary>
    /// timer event to switch between the countdown images
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void tmCountDown_Tick(object sender, EventArgs e)
    {
        counter++;
        //MessageBox.Show("c:/vrfid/apppics/" + counter + ".jpg");
        pbCountDown.Image = new Bitmap("c:/vrfid/apppics/" + counter + ".jpg");
    }

Ответы [ 5 ]

6 голосов
/ 21 июня 2011

Вы должны использовать

 counter++;
 this.SuspendLayout();
 pbCountDown.Image = new Bitmap("c:/vrfid/apppics/" + counter + ".jpg");
 this.ResumeLayout();

Я проверил это, и оно работало, надеюсь, оно вам поможет

3 голосов
/ 22 июня 2011

Класс Windows Timer использует очередь сообщений для уведомления об истечении времени таймера.И поэтому вам нужно запустить цикл обработки сообщений, чтобы получить правильное число истекших таймеров.Таким образом, вы должны установить переменную counter как поле класса, а затем вы можете увеличить его в обработчике событий.Как то так ...

    // Main Code
    _counter = 0;
    tmCountDown.Start();

    // Event Handler
    private void tmCountDown_Tick(object sender, EventArgs e)    
    {
        _counter++;
        if (_counter == 4)
            tmCountDown.Stop();
        else
            pbCountDown.Image = new Bitmap("c:/vrfid/apppics/" + _counter + ".jpg");
    }
1 голос
/ 22 июня 2011

Нашел решение, таймер не требуется.Спасибо за ответы.

        int counter = 0;
        // start the counter to swap the images
        while (counter < 4)
        {
            // holding off picture taking
            counter++;
            //MessageBox.Show("c:/vrfid/apppics/" + counter + ".jpg");
            pbCountDown.Image = new Bitmap("c:/vrfid/apppics/" + counter + ".jpg");
            pbCountDown.Refresh();
            Thread.Sleep(1000);
        }
        // reset counter for timer
        counter = 0;
1 голос
/ 21 июня 2011

Проблема в том, что вы вращаетесь в занятом цикле, пока работает таймер. Вы должны проверить состояние остановки таймера в обработчике событий.

Я также немного удивлен, что код работает. Если вы используете System.Windows.Forms.Timer, вы даже не должны входить в обработчик событий, поэтому счетчик не должен увеличиваться. Также значение счетчика не проверяется и не обновляется должным образом. Цикл while может быть преобразован в бесконечный цикл.

0 голосов
/ 20 февраля 2013

УСТАНОВИТЬ «ИНТЕРВАЛ = 1000» в свойствах таймера это означает, что ваш таймер каждые 1000 мс обновляется И тогда используйте if (second == 10) .....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...