我想减慢一个循环,使其每5秒循环一次。
在ActionScript中,我会使用计时器和计时器完成事件来执行此操作。我将如何在C#中使用它?
答案 0 :(得分:14)
您可以在循环中添加此调用:
System.Threading.Thread.Sleep(5000); // 5,000 ms
或者为了更好的可读性而优选:
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(5));
但是,如果您的应用程序具有用户界面,则不应该在前台线程(处理应用程序消息循环的线程)上休眠。
答案 1 :(得分:11)
您可以尝试使用Timer,
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;
答案 2 :(得分:4)
根本不要使用循环。设置Timer
对象并对其触发的事件作出反应。注意,因为这些事件将在不同的线程上触发(来自线程池的计时器线程)。
答案 3 :(得分:1)
假设你有一个for
- 循环,你想用它来每秒写入数据库。然后,我将创建一个设置为1000毫秒间隔的计时器,然后使用计时器,就像使用while
- 循环一样,如果您希望它像for
- 循环一样运行。通过在循环之前创建整数并在其中添加它。
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.
}
}
}