我正在创建一个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");
}
答案 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).....