每秒更改图片框中的图像C#

时间:2011-06-21 09:17:44

标签: c# winforms

我正在创建一个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 个答案:

答案 0 :(得分:6)

你应该使用

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

我测试了它并且它正在工作,希望它可以帮助你

答案 1 :(得分:3)

Windows Timer类使用消息队列通知计时器已过期。因此,您需要运行消息循环才能获得正确的计时器到期次数。因此,您应该将计数器变量设置为类字段,然后您可以在事件处理程序中增加它。像这样......

    // 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");
    }

答案 2 :(得分:1)

问题是在计时器运行时你正在一个繁忙的循环中旋转。您应该检查事件处理程序中的计时器停止条件。

我也对代码的工作有点惊讶。如果您使用System.Windows.Forms.Timer,您甚至不应该进入事件处理程序,因此计数器不应该递增。此外,计数器值未正确检查或更新。 while循环可以转换为无限循环。

答案 3 :(得分:1)

找到解决方案,无需计时器。谢谢你的回答。

        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;

答案 4 :(得分:0)

在计时器属性中设置“INTERVAL = 1000” 这意味着你的计时器每1000毫秒刷新一次 然后使用if(second == 10).....