每秒显示图标(倒数计时器)

时间:2016-01-29 12:13:57

标签: c# timer

我正在尝试在表单上显示一种倒数计时器。一旦满足某些条件,我的程序基本上捕获用户的快照(通过网络摄像头)。一旦满足条件,我想显示一个理想的基于图片的倒计时器(通过启用我在表单上的图标),然后捕获网络摄像头图像。

到目前为止,我一直在尝试使用计时器等每个刻度线显示其中一个图标,然后勾选显示下一个...然后捕获图像。到目前为止,我只能让它显示一个图标并拍摄图像,我不确定如何在每个刻度上更换图标x秒

e.g。

public void matchconditionshere()
   // match conditions here
   timer1.Start()

public void timer1_Tick(object sender, EventArgs e)
 {
   _3.Visibility = Visibility.Visible
   _2.Visibility = Visibility.Collapsed
   _1.Visibility = Visibility.Collapsed

    // not sure what to put here to generate another tick?

   _2.Visibility = Visibility.Visible
   _3.Visibility = Visibility.Collapsed
   _1.Visibility = Visibility.Collapsed

   _1.Visibility = Visibility.Visible
   _3.Visibility = Visibility.Collapsed
   _2.Visibility = Visibility.Collapsed

   _capture.Start() 
   // capture image from webcam

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

由于您说要使用图标,因此您似乎需要在其中添加逻辑,以便您可以正确选择要显示的图标。例如,对于3秒倒计时,您必须添加代码才能知道第一个刻度还剩3秒(以便显示3秒图标),第二个刻度还剩2秒钟,依此类推。

换句话说,比如:

// only example value; get a real one from another input/event handler
private int _countDownSeconds = 3;
public void webCamTimer_Tick(object sender, EventArgs e)
{
    switch (_countDownSeconds--) {
        case 3:
            // show icon for 3 and return
            break;
        case 2:
            // show icon for 2 and return
            break;
        case 1:
            // show icon for 1 and return
            break;
        case 0:
            // time to take picture
            _webCam.TakeSnapshot();
            break;
        default:
            // log a message, ask user to re-enter time limit,
            // or simply re-assign a previously entered value;
            // for example:
            _countDownSeconds = Convert.ToInt32(userTimeLimitTextBox.Text);
            break;
    }
}

值得考虑的是,测试/维护可能更耗时,尤其是当倒计时器需要更新时(例如将其更新为5秒而不是3秒,或者让用户可以配置)等)。此外,倒数计时器越高,您需要考虑的排列数量就越多。您已经可以看到一个简单的3秒计时器的案例数。

或许将倒计时显示为数字的string表示(例如ToString()方法),这对长期来说是个更好的主意。

PS:您还应该使用.NET命名约定。您可以查看MSDN文档以获取有关这些文档的更多信息,但一般情况下,只需查看您正在使用的.NET类/方法/属性中已有的命名模式。

答案 1 :(得分:0)

您可以定义计数器和计数计时器滴答。在switch中使用勾选计数器来定义在何时执行操作:

int _counter;

void timer1_Tick(object sender, EventArgs e)
{
    _counter++;
    switch(_counter)
    {
        case 1:
            _1.Visibility = Visibility.Visible;
            ...
            break;
        case 10: // do something at 10th tick
            _2.Visibility = Visibility.Visible;
            ...
            break;
        ...
    }

    // capture image from webcam
    _capture.Start() 
}

答案 2 :(得分:0)

从您发布的问题和样本中我了解到,对于每个刻度,您要显示3个列表中的一张图片。这可以通过以下方式实现:

static int count=1;
public void timer1_Tick(object sender, EventArgs e)
{
   if(count==1)
   {
      _1.Visibility = Visibility.Visible;
      _2.Visibility = Visibility.Collapsed;
      _3.Visibility = Visibility.Collapsed;
      count++;
   }
   else if(count==2)
   {
      _2.Visibility = Visibility.Visible;
      _1.Visibility = Visibility.Collapsed;
      _3.Visibility = Visibility.Collapsed;
      count++;
   }
   else
   {
      _3.Visibility = Visibility.Visible;
      _1.Visibility = Visibility.Collapsed;
      _3.Visibility = Visibility.Collapsed;
      count==1;
      _capture.Start() 
   }
}

_capture.Start()方法内,请确保停止计时器。否则计时器将继续运行,对该方法进行多次调用。