我正在尝试在表单上显示一种倒数计时器。一旦满足某些条件,我的程序基本上捕获用户的快照(通过网络摄像头)。一旦满足条件,我想显示一个理想的基于图片的倒计时器(通过启用我在表单上的图标),然后捕获网络摄像头图像。
到目前为止,我一直在尝试使用计时器等每个刻度线显示其中一个图标,然后勾选显示下一个...然后捕获图像。到目前为止,我只能让它显示一个图标并拍摄图像,我不确定如何在每个刻度上更换图标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
任何帮助都将不胜感激。
答案 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()方法内,请确保停止计时器。否则计时器将继续运行,对该方法进行多次调用。