C#定时器(减慢循环)

时间:2010-08-15 08:12:04

标签: c# .net

我想减慢一个循环,使其每5秒循环一次。

ActionScript中,我会使用计时器和计时器完成事件来执行此操作。我将如何在C#中使用它?

4 个答案:

答案 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.
        }
    }
}