2014-01-16 76 views
0

這是我1分鐘後調用事件的代碼,每隔1分鐘後有兩個按鈕啓動並調用已過去的事件,第二個按鈕用於停止啓動此定時器過期事件。停止計時器已按下按鈕單擊的事件

啓動按鈕EVNT代碼

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; 
    } 

定時器經過的事件

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

停止按鈕事件代碼

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

我想停止這個定時器活動停止單擊此按鈕evnent。這裏應該是什麼代碼?

我的整個代碼是

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; 
    } 
} 
+0

'_timer.Stop()',不是嗎? –

+0

_timer.Stop()或_timer.Enabled = false – Heslacher

+0

我試過這個 System.Timers.Timer _timer; (對象發件人,EventArgs e) _timer = new System.Timers.Timer(10000); _timer.Elapsed + = new ElapsedEventHandler(_timer_Elapsed); _timer.Enabled = true; } protected void Button2_Click(object sender,EventArgs e) { _timer.Stop(); } 當我點擊停止按鈕時 未將對象引用設置爲對象的實例。:( – Jahangeer

回答

1

解決方案1:可以調用TimerStop()方法。

_timer.Stop(); 

解決方案2:可以在TimerEnabled屬性設置爲false

_timer.Enabled=false; 

注:我建議調用Stop()方法。

解決方案3:

你得到Object reference not set to an instance of an object異常,因爲你沒有點擊button1初始化你的計時器。所以你不應該點擊button2,直到你點擊button1作爲button1點擊事件處理程序包含初始化代碼以使你的當前代碼工作。

OR

我建議你到timer初始化語句移動到Button1單擊事件處理程序之外。

試試這個:

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(); 
} 
+0

停止()只是設置Enabled = false,所以設置Enabled = false會更快一點 – Heslacher

+0

@Heslacher:我同意你,但我認爲有時回'Enabled = 。FALSE'沒有工作對我來說,這就是爲什麼我建議'停止()' –

+0

我想這 System.Timers.Timer _timer; 保護無效的button1_Click(對象發件人,EventArgs的){ _timer =新系統。 Timers.Timer(10000); _timer.Elapsed + = new ElapsedEventHandler(_timer_Elapsed); _timer.Enabled = true; } protected void Button2_Click(object sender,EventArgs e) { _timer.Stop(); } 當我點擊停止按鈕時 未將對象引用設置爲對象的實例。 :( – Jahangeer