2010-08-15 3 views

ответ

14

Вы можете добавить этот вызов внутри цикла:

System.Threading.Thread.Sleep(5000); // 5,000 ms 

или предпочтительнее для лучшей читаемости:

System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5)); 

Однако, если ваше приложение имеет пользовательский интерфейс, который вы никогда не должны спать на переднем плане резьбы (поток, который обрабатывает цикл сообщений приложений).

+0

Работал с благодарностью! – Chin

+3

Этот код будет ждать 5 секунд между каждой итерацией, а не стрелять каждые 5 секунд. Если код, который вы делаете в своем цикле, занимает много времени, например, веб-запрос, то сумма будет больше 5 секунд. Решение с таймером из усыновления более точно соответствует вашему вопросу, но любое решение может быть подходящим для ваших нужд. –

+1

Для удобства чтения функция Sleep также может принимать TimeSpan в качестве аргумента. System.Threading.Thread.Sleep (TimeSpan.FromSeconds (5)); –

10

Вы можете попробовать использовать таймер,

using System; 

public class PortChat 
{ 
    public static System.Timers.Timer _timer; 
    public static void Main() 
    { 

     _timer = new System.Timers.Timer(); 
     _timer.Interval = 5000; 
     _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed); 
     _timer.Enabled = true; 
     Console.ReadKey(); 
    } 

    static void _timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     //Do Your loop 
    } 
} 

Кроме того, если ваша операция в цикле может длиться более 5 сек, Вы можете установить

_timer.AutoReset = false; 

для отключения следующего тика таймера до работы закончить в цикле
Но конец конец цикла Вам нужно снова включить таймер, как

_timer.Enabled = true; 
4

Не используйте петлю вообще. Настройте объект Timer и отреагируйте на его событие. Остерегайтесь, потому что эти события будут срабатывать в другом потоке (поток таймера из threadpool).

1

Предположим, у вас есть for -loop, который вы хотите использовать для записи в базу данных каждую секунду. Затем я создавал бы таймер, который был установлен в интервале 1000   мс, а затем используйте таймер так же, как вы бы использовали while -loop, если вы хотите, чтобы он действовал как for -loop. Создавая целое число перед циклом и добавляя его внутри него.

public patial class Form1 : From 
{ 
    timer1.Start(); 
    int i = 0; 
    int howeverLongYouWantTheLoopToLast = 10; 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     if (i < howeverLongYouWantTheLoopToLast) 
     { 
      writeQueryMethodThatIAssumeYouHave(APathMaybe, i); // <-- Just an example, write whatever you want to loop to do here. 
      i++; 
     } 
     else 
     { 
      timer1.Stop(); 
      //Maybe add a little message here telling the user the write is done. 
     } 
    } 
} 
Смежные вопросы