C# 每秒显示图标(倒计时)

C# 每秒显示图标(倒计时),c#,timer,C#,Timer,我试图在我的表单上显示一种倒计时计时器。我的程序基本上是在满足某些条件后捕获用户的快照(通过网络摄像头)。一旦条件得到满足,我想显示一个倒计时计时器理想的图片为基础(通过启用图标,我在一个窗体上),然后捕获网络摄像头的图像 到目前为止,我一直在尝试使用一个计时器,所以在每个刻度上,它都会显示一个图标,一个刻度稍后会显示下一个。。etc然后捕获图像。到目前为止,我只能让它显示一个图标并拍摄一张图像,我不知道如何让图标在每个刻度上改变x秒 e、 g 如有任何帮助,我们将不胜感激。您可以定义计数器并计

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

到目前为止,我一直在尝试使用一个计时器,所以在每个刻度上,它都会显示一个图标,一个刻度稍后会显示下一个。。etc然后捕获图像。到目前为止,我只能让它显示一个图标并拍摄一张图像,我不知道如何让图标在每个刻度上改变x秒

e、 g


如有任何帮助,我们将不胜感激。

您可以定义计数器并计算计时器计时。使用
开关中的勾号计数器来定义在哪个时刻要执行的操作:

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() 
}

既然您说要使用图标,那么似乎需要在其中添加逻辑,以便正确选择要显示的图标。例如,对于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秒计时器的案例数量

从长远来看,将倒计时显示为数字的
字符串
表示(例如
ToString()
方法)可能是一个更好的主意


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

从您发布的问题和示例中,我了解到,对于每个勾号,您都希望从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() 
   }
}

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

此外,我认为
\u counter=0。否则,它将不断增加,并且永远不会评估为一种切换情况。第一次就可以了。嗨,雷,我试过你的解决方案,效果不错。非常感谢您的帮助!:)
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() 
   }
}