Reputation: 154
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
Upvotes: 0
Views: 1531
Reputation: 56727
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.
Upvotes: 0
Reputation: 32719
Edit the code as below
public partial class TimerScheduler : System.Web.UI.Page
{
System.Timers.Timer _timer = new System.Timers.Timer(10000);
protected void Page_Load(object sender, EventArgs e)
{
_timer.Elapsed -= new ElapsedEventHandler(_timer_Elapsed); //to avoid multiple linking of event
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
}
static void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
_timer.Enabled = true;
}
protected void Button2_Click(object sender, EventArgs e)
{
_timer.Enabled=false;
}
}
Upvotes: 1
Reputation: 26209
You just Subscribe to the ElapsedEvent
outside the Button1_Click
event handler and start the Timer
in Button1_Click
event handler.
System.Timers.Timer _timer = new System.Timers.Timer(10000);
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
protected void Button1_Click(object sender, EventArgs e)
{
_timer.Start();
}
protected void Button2_Click(object sender, EventArgs e)
{
_timer.Stop();
}
Upvotes: 0