【问题标题】:Stop Timer Elapsed event on button click按钮单击时停止计时器经过事件
【发布时间】:2014-03-18 17:59:40
【问题描述】:

这是我在 1 分钟后调用事件的代码,我有两个按钮,一个用于开始,每 1 分钟调用一次已用事件,第二个按钮用于停止此计时器已用事件触发。

启动按钮事件代码是

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

我想停止此计时器活动以在此按钮单击事件上停止。这里应该是什么代码??

我的整个代码是

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

【问题讨论】:

  • _timer.Stop(),不是吗?
  • _timer.Stop() 或 _timer.Enabled=false
  • 我试过这个 System.Timers.Timer _timer; protected void Button1_Click(object sender, 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();当我单击停止按钮时,对象引用未设置为对象的实例。 :(
  • _timer 为 null 会引发此异常
  • 让 _timer 成为 Click 事件处理程序的局部变量是明显的错误。将其移出方法,使其成为您的类的字段。

标签: c# timer


【解决方案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点击事件处理程序包含初始化代码以使你的当前代码工作。

我建议您将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(); 
}

【讨论】:

  • Stop() 只是设置 Enabled=false 所以设置 Enabled=false 会快一点。
  • @Heslacher:我同意你的观点,但我想有时回来Enabled=false 对我不起作用,这就是我建议Stop() 的原因。
  • 我试过这个 System.Timers.Timer _timer; protected void Button1_Click(object sender, 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();当我单击停止按钮时,对象引用未设置为对象的实例。 :(
  • @SudhakarTillapudi _timer 为 null,会引发此异常
  • @user1933955:用Solution3检查我编辑的答案
猜你喜欢
  • 1970-01-01
  • 2021-03-26
  • 2013-02-23
  • 2012-11-23
  • 2021-11-23
  • 2022-11-21
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多