Jahangeer
Jahangeer

Reputation: 154

Stop Timer Elapsed event on button click

Here is my Code for calling an event after 1 minute, I have two button one for start and calling elapsed event after every 1 minute and second button for stopping this timer elapsed event to fire.

start Button evnt code is

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

Timer Elapsed event

     static void _timer_Elapsed(object sender, ElapsedEventArgs e)
        {
//It works fine it fires after every minute
    }

Stop button event code

  protected void Button2_Click(object sender, EventArgs e)
        {
//What to do here??
    }

I want to stop this timer activity to stop on this button click evnent. what should be code here??

My entire code is

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);
    //_timer = ;
    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;
    }
}

Upvotes: 0

Views: 2801

Answers (1)

Sudhakar Tillapudi
Sudhakar Tillapudi

Reputation: 26199

Solution 1: you can Call Stop() method of the Timer.

_timer.Stop();

Solution 2: you can Set Enabled property of the Timer to false.

_timer.Enabled=false;

Note: I would suggest calling Stop() method.

Solution 3:

you are getting Object reference not set to an instance of an object exception because you have not initialised your timer by clicking on button1 . so you should not click on button2 untill unless you click on button1 as button1 click event handler contains initialisation code to make your present code to work.

OR

I would suggest you to move the timer initialisation statement to outside the Button1 click event handler.

Try This :

System.Timers.Timer _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(); 
}

Upvotes: 1

Related Questions