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

我需要每5秒运行一次function10分钟。

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

非常感谢你

安德里亚

只需捕获您想要停止的时间,并从已用过的处理程序中结束计时器。 这是一个例子(注意:我使用了System.Threading.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..... } } 

你的计时器循环如下:

 DateTime endTime = DateTime.Now.AddMinutes(10); while(endTime < DateTime.Now) { // Process loop } 

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

在您的情况下,10分钟= 600秒/ 5秒=需要120次呼叫。 只需让计数器跟踪你的函数被调用了多少次。

Timer.Stop()之后的Timer.Stop()

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

您可以计算函数调用的次数,并创建递减计数器,经过一段时间后取消订阅计时器滴答。 或者你可以运行另一个有嘀嗒周期的计时器 – 10分钟,然后打勾,你可以取消订阅计时器,打电话给你的function。

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

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

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

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

 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; }