Я хотел бы замедлить цикл так, чтобы он проходил каждые 5 секунд.C# таймер (замедление цикла)
В ActionScript, я бы использовал таймер и событие завершения таймера, чтобы сделать это. Как мне это сделать на C#?
Я хотел бы замедлить цикл так, чтобы он проходил каждые 5 секунд.C# таймер (замедление цикла)
В ActionScript, я бы использовал таймер и событие завершения таймера, чтобы сделать это. Как мне это сделать на C#?
Вы можете добавить этот вызов внутри цикла:
System.Threading.Thread.Sleep(5000); // 5,000 ms
или предпочтительнее для лучшей читаемости:
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
Однако, если ваше приложение имеет пользовательский интерфейс, который вы никогда не должны спать на переднем плане резьбы (поток, который обрабатывает цикл сообщений приложений).
Вы можете попробовать использовать таймер,
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;
Не используйте петлю вообще. Настройте объект Timer
и отреагируйте на его событие. Остерегайтесь, потому что эти события будут срабатывать в другом потоке (поток таймера из threadpool).
Предположим, у вас есть 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.
}
}
}
Работал с благодарностью! – Chin
Этот код будет ждать 5 секунд между каждой итерацией, а не стрелять каждые 5 секунд. Если код, который вы делаете в своем цикле, занимает много времени, например, веб-запрос, то сумма будет больше 5 секунд. Решение с таймером из усыновления более точно соответствует вашему вопросу, но любое решение может быть подходящим для ваших нужд. –
Для удобства чтения функция Sleep также может принимать TimeSpan в качестве аргумента. System.Threading.Thread.Sleep (TimeSpan.FromSeconds (5)); –