Search code examples
c#asp.nettimer

Unable to stop Timer in C#


Hi all I have used timer class to call an event after a minute here is my code

   public partial class TimerScheduler : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    static void _timer_Elapsed(object sender, ElapsedEventArgs e)
    {

    }
    System.Timers.Timer _timer = new System.Timers.Timer(10000);
    protected void Button1_Click(object sender, EventArgs e)
    {
        _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
        _timer.Enabled = true;
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        _timer.Stop();
        _timer.Enabled=false;
    }
}

but as I click start button timer works fine and after every minute it gets called but as I try to stop it it does not work And the _timer_Elapsed events gets called after every 1 minute


Solution

  • You could easily make the timer fire only once by setting AutoReset = false. Then you'd have to restart the timer manually in the timer's event handler.

    System.Timers.Timer _timer = new System.Timers.Timer(1000);  
    bool timerStarted = false;
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
        _timer.Enabled = true;
        _timer.AutoReset = false;
        timerStarted = true;
    }
    
    protected void Button2_Click(object sender, EventArgs e)
    {
        timerStarted = false;
        _timer.Enabled=false;
    }
    
    void _timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        _timer.Enabled = timerStarted;
    }
    

    Oh, and by the way: I don't know what you're trying to achieve, but an ASP.NET page is not something that runs for a longer time. The code is executed once on the server and the HTML is passed back to the client. So what you want may not work at all.