簡體   English   中英

無法停止C#中的Timer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM