【问题标题】:How do I wait for a timer to elapse before continuing a for loop?如何在继续 for 循环之前等待计时器过去?
【发布时间】:2015-02-12 08:08:14
【问题描述】:

我正在使用常规的 foreach 循环,我想等到计时器完成后再继续下一个案例。我该怎么做?

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

【问题讨论】:

  • 你的意思是在第一次完成后开始第二个计时器等等?你的计时器是循环计时器吗?如果是,完成的定义是什么?
  • 第一次完成后
  • 我想选择正确的“定时器”类可以解决你的问题。如果您不熟悉该主题,这可能是一个好的开始:msdn.microsoft.com/en-us/magazine/cc164015.aspx。对于您的场景,“System.Threading.Timer”可能与指定无间隔的参数一起使用(意味着它只被调用一次)。由于我不完全理解您的目标,也许在不同的线程上执行计时并在该线程上使用“Thread.Sleep”可能会得到相同的结果。

标签: c# timer


【解决方案1】:

如果我对您想要的内容的理解是正确的(按特定顺序显示图像),那么 for 循环可能无法按您希望的方式工作。计时器不会阻塞循环 - 这就是它的意图。

*您不想以这种方式(或根本不想)阻止您的 UI。

由于您已经为每个图像分配了一个计时器,因此只需将间隔的分配从开始分成两个 for 循环。

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

【讨论】:

  • 我有几张图片,每张都有不同的展示时间。我必须等到第一个计时器结束,然后以不同的时间显示第二个
  • 我更新了代码,以便正确使用不同的间隔,但另一个建议是在计时器的 Tick 事件处理程序中布置序列。当 Tick 事件被触发时,启动下一个计时器。并且不要忘记停止上一个计时器。
猜你喜欢
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
相关资源
最近更新 更多