在c#中每x秒执行一次操作y分钟

时间:2009-04-24 16:42:59

标签: c# timer

我需要每隔5秒运行一次功能,持续10分钟。

我使用计时器运行它5秒钟,但如何将计时器限制为仅10分钟?

9 个答案:

答案 0 :(得分:13)

只需捕获您想要停止的时间并从已用过的处理程序中结束计时器。这是一个例子(注意:我使用了System.Threading.Timer timer。为你正在做的事情选择合适的计时器。例如,如果你在Winforms中写作,你可能会在System.Windows.Forms.Timer之后。 )

public class MyClass
{
    System.Threading.Timer Timer;
    System.DateTime StopTime;
    public void Run()
    {
        StopTime = System.DateTime.Now.AddMinutes(10);
        Timer = new System.Threading.Timer(TimerCallback, null, 0, 5000);
    }

    private void TimerCallback(object state)
    {
        if(System.DateTime.Now >= StopTime)
        {
            Timer.Dispose();
            return;
        }
        // Do your work...
    }
}

答案 1 :(得分:10)

让你的计时器循环如下:

DateTime endTime = DateTime.Now.AddMinutes(10);

while(endTime < DateTime.Now)
{
  // Process loop
}

答案 2 :(得分:6)

将Y分钟除以X间隔,以获得需要运行的次数。之后,您只需要计算函数被调用的次数。

在你的情况下,10分钟= 600秒/ 5秒=需要120次通话。只需让计数器跟踪你的函数调用次数。

答案 3 :(得分:3)

在120 Ticks之后

Timer.Stop()

答案 4 :(得分:3)

只需使用DateTime变量来跟踪它应该结束的时间并在开始之前设置它。在您的Elapsed事件处理程序上,检查信号时间是否小于结束时间。如果不是,请停止计时器。

答案 5 :(得分:3)

您可以计算函数调用的次数,并创建递减计数器,经过一段时间后取消订阅计时器滴答。或者您可以运行另一个具有勾选周期的计时器 - 10分钟,并在勾选时取消订阅计时器勾选调用您的功能。

答案 6 :(得分:2)

注意开始时间。在每次通话中,测试currentTime + 5秒&gt; startTime + 10分钟。如果是,请禁用计时器。

我更倾向于使用这种方法来运行N刻度,因为定时器不能保证在你喜欢它时触发。现有世界时间超过10分钟可能有120个滴答。

答案 7 :(得分:2)

您可以设置两个运行5秒的计时器,另一个计时器运行10分钟并禁用第一个计时器

答案 8 :(得分:2)

您可以使用第二个计时器:

class Program
{
    static void Main(string[] args)
    {
        int interval = 5 * 1000; //milliseconds
        int duration = 10 * 60 * 1000; //milliseconds

        intervalTimer = new System.Timers.Timer(interval);
        durationTimer = new System.Timers.Timer(duration);

        intervalTimer.Elapsed += new System.Timers.ElapsedEventHandler(intervalTimer_Elapsed);
        durationTimer.Elapsed += new System.Timers.ElapsedEventHandler(durationTimer_Elapsed);

        intervalTimer.Start();
        durationTimer.Start();
    }

    static void durationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        intervalTimer.Stop();
        durationTimer.Stop();
    }

    static void intervalTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        //call your method
    }

    private static System.Timers.Timer intervalTimer;
    private static System.Timers.Timer durationTimer;
}