Execute an operation every x seconds for y minutes in c#

后端 未结 9 613
Happy的楠姐
Happy的楠姐 2021-01-02 06:45

I need to run a function every 5 seconds for 10 minutes.

I use a timer to run it for 5 secs, but how do I limit the timer to only 10 mins?

相关标签:
9条回答
  • 2021-01-02 07:25

    Timer.Stop() after 120 Ticks.

    0 讨论(0)
  • 2021-01-02 07:26

    Divide the Y minutes by the X interval to get how many times it needs to run. After that you just need to count how many times the function has been called.

    In your case, 10 min = 600 seconds / 5 seconds = 120 calls needed. Just have a counter keep track of how many times your function has been called.

    0 讨论(0)
  • 2021-01-02 07:29

    You can set two timers one that run for 5 secs and the other one that run for 10min and disable the first one

    0 讨论(0)
  • 2021-01-02 07:31

    You could use a second timer:

    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;
    }
    
    0 讨论(0)
  • 2021-01-02 07:33

    Just capture the time that you want to stop and end your timer from within the elapsed handler. Here's an example (note: I used a System.Threading.Timer timer. Select the appropriate timer for what you are doing. For example, you might be after a System.Windows.Forms.Timer if you are writing in Winforms.)

    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...
        }
    }
    
    0 讨论(0)
  • 2021-01-02 07:34

    Note the start time. In each call, test if currentTime + 5 seconds > startTime + 10 minutes. If so, disable the timer.

    I prefer this approach to just running for N ticks, as timers are not guaranteed to fire when you'd like them to. It's possible 120 ticks may run over 10 minutes of real world time.

    0 讨论(0)
提交回复
热议问题