2015-02-12 3 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

Вы хотите запустить второй таймер после первого завершения и так далее? Является ли ваш таймер повторяющимся таймером? Если да, то каково определение завершения? –

+0

После того, как первый раз закончен – Pepinho

+0

Я думаю, что выбор правильного «Таймера» -класса может решить вашу проблему. Если вы новичок в этой теме, это может быть хорошим началом: https://msdn.microsoft.com/en-us/magazine/cc164015.aspx. Для вашего сценария возможно, что «System.Threading.Timer» может работать с параметром без интервала (означает, что он вызывается только один раз). Поскольку я не полностью понимаю вашу цель, возможно, выполнение времени в другом потоке и использование «Thread.Sleep» в этом потоке может дать вам тот же результат. –

ответ

0

, если мое понимание того, что вы хотите правильно (показывать изображения в определенной последовательности), то для контура может не работать так, как вы хотите. таймер не будет блокировать цикл - так оно и было предусмотрено.

* вы не хотели бы блокировать свой интерфейс таким образом (или вообще).

Поскольку вы уже назначили таймер для каждого изображения, просто отделите назначение интервала от начала до двух циклов 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

+0

Я обновил код, чтобы он правильно использовал разные интервалы, но другое предложение должно было бы вывести последовательность в обработчике событий Tick. Когда событие Tick активировано, запустите следующий таймер. И не забудьте остановить предыдущий таймер. – mickeymicks

Смежные вопросы