Search code examples
c#timer

Using Timer to delay an operation a few seconds


I am trying to delay my method by using a timer:

private System.Timers.Timer _delayTimer;

    private void delay()
    {
          _delayTimer = new System.Timers.Timer();
          _delayTimer.Interval = 5000;
          //_delayTimer.Enabled = true;
          _delayTimer.Elapsed += _delayTimer_Elapsed;
          _delayTimer.Start();
          someMethod();
        }
    }

    private void _delayTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        // delay for 5 seconds
    }

When i am get into delay() method i want to start the timer, than i want the 5 seconds delay and only after that i want to execute someMethod() and currently this not happen, after execute delay() the someMethod() executed without 5 seconds delay


Solution

  • Your current code sets up the timer and then immediately executes someMethod. Instead of this, you need to put the actual method call inside your Elapsed handler:

    private void delay()
    {
          _delayTimer = new System.Timers.Timer();
          _delayTimer.Interval = 5000;
          //_delayTimer.Enabled = true;
          _delayTimer.Elapsed += _delayTimer_Elapsed;
          _delayTimer.Start();
        }
    }
    
    private void _delayTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
          someMethod();
    }
    

    And if there's nothing else you intend to do you can simply write this inline:

    _delayTimer = new System.Timers.Timer();
    _delayTimer.Interval = 5000;
    _delayTimer.Elapsed += (o, e) => someMethod();
    _delayTimer.Start();