[英]Unable to stop Timer in C#
大家好,我用計時器類在一分鍾后調用一個事件,這是我的代碼
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;
}
}
但是當我單擊“開始”按鈕計時器時,它工作正常,並且每隔一分鍾就會被調用,但是當我嘗試停止它時,它不起作用,並且每1分鍾就會調用一次_timer_Elapsed事件
如下編輯代碼
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;
}
}
您只需在Button1_Click
事件處理程序外部訂閱ElapsedEvent
並在Button1_Click
事件處理程序中啟動Timer
。
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();
}
您可以通過設置AutoReset = false
輕松使計時器僅觸發一次。 然后,您必須在計時器的事件處理程序中手動重新啟動計時器。
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;
}
哦,順便說一句:我不知道您要達到什么目的,但是ASP.NET頁不能運行更長的時間。 該代碼在服務器上執行一次,並將HTML傳遞回客戶端。 因此,您想要的東西可能根本不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.