2015-02-12 64 views
2

我正在使用常规的foreach循环,并且我想等到计时器结束后再继续下一个案例。我怎么做?在继续for循环之前,我该如何等待一个定时器?

foreach (int i in TimeImage) 
{ 
    Timer timer1 = new Timer(); 
    timer1.Tick += new EventHandler(showImage); 
    timer1.Interval = i * 1000; 
    timer1.Start(); 
    showImage(); 
} 
+0

你的意思是第一次完成后启动第二个计时器等等?你的定时器是否重复定时器?如果是的话,完成的定义是什么? – 2015-02-12 08:16:22

+0

第一次完成后 – Pepinho 2015-02-12 08:17:49

+0

我猜想选择正确的“计时器”类可以解决您的问题。如果您不熟悉此主题,这可能是一个好的开始:https://msdn.microsoft.com/en-us/magazine/cc164015.aspx。对于你的情况,也许“System.Threading.Timer”可以使用指定无间隔的参数(意味着它只被调用一次)。由于我不完全理解你的目标,也许在不同的线程上执行计时,并在该线程上使用“Thread.Sleep”可能会得到相同的结果。 – 2015-02-12 09:47:02

回答

0

如果我对你想要的理解是正确的(表现出一定的序列中的图像),那么for循环可能不工作,你希望它的方式。计时器不会阻止循环 - 无论如何,这是它的目的。

*您不想以这种方式(或根本)阻止您的用户界面。

由于您已经为每个图像分配一个计时器,只需将间隔从开始位置分配到两个for-loops。

List<Timer> timers = new List<Timer>(); 
//i'm assuming that TimeImage is a list? 
for (int i=1; i<=TimeImage.Count(); i++) 
{ 
    Timer timer1 = new Timer(); 
    timer1.Tick += new EventHandler(showImage); 
    timer1.Interval = i * 1000; 
    timers.add(timer1); 
    //note showimage should know which particular image is to be loaded 
    //showimage should also stop the last timer that was triggered 
} 

foreach (Timer atimer in timers) 
{ 
    atimer.Start(); 
} 
+0

我有几个图像和每个不同的时间显示。我必须等到第一个计时器消逝,然后用不同的时间显示第二个计时器 – Pepinho 2015-02-12 08:59:25

+0

我更新了代码,以便正确使用不同的时间间隔,但另一个建议是在计时器的Tick事件处理程序中布置序列。当Tick事件触发时,启动下一个定时器。并且不要忘记停止前一个定时器。 – mickeymicks 2015-02-12 09:05:51

相关问题