【问题标题】:Timer C# Stop() doesn't really stopTimer C# Stop() 并没有真正停止
【发布时间】:2012-12-07 11:11:52
【问题描述】:

我有一个表单,其中包含一个文本框,显示时间间隔为 1 秒,直到 2 分钟。它工作正常。但是,我需要计时器在一轮游戏结束时停止,并在单击另一个表单的按钮时重新开始。所以我在timer_tick事件处理程序中有_timer.Stop(),在Form 2的按钮click事件处理程序中有_timer.Start()

我的问题是计时器从经过多少时间开始,直到我按下另一个表单上的按钮,而不是再次从 0:00 开始。有什么想法吗?

这是关于计时器的代码:

 private DateTime _myDateTime;
 private System.Windows.Forms.Timer _timer;
 private DateTime newDate;

 public Tournament()
 {
     _timer = new System.Windows.Forms.Timer();
     _timer.Interval = 1000;
     _timer.Tick += Timer_Tick;
     _myDateTime = DateTime.Now;

     newDate = new DateTime();
     newDate = newDate.AddMinutes(2.00);
     _timer.Start();
     InitializeComponent();
 }

 void Timer_Tick(object sender, EventArgs e)
 {
        var diff = DateTime.Now.Subtract(_myDateTime);
        this.textBox1.Text = diff.ToString(@"mm\:ss");

        DateTime dt = Convert.ToDateTime(diff.ToString());

        if (newDate.Minute == dt.Minute)
        {
           _timer.Stop();
           _myDateTime = DateTime.Now;

           displayPointsOrResults();

           this.textBox1.Text = diff.ToString(@"mm\:ss");  
        }
  }

displayPointsOrResults() 我正在创建另一个表单Points() 的实例,所以在点表单中我有按钮1,我在它的事件处理程序中有这个,除了与计时器无关的其他事情:tournament.Timer1.Start();

我从锦标赛课程中获取计时器并重新开始。

我做错了什么?

【问题讨论】:

  • 试试 _timer.Stop(); _timer.Enabled = false;

标签: c# timer


【解决方案1】:

我的问题是计时器会从经过多少时间开始,直到我按下另一个表单上的按钮,而不是再次从 0:00 开始。

嗯,是的,它会 - 当你停止计时器时,你正在重置_myDateTime

_timer.Stop();
_myDateTime = DateTime.Now;

您应该将第二行移到重新启动它的位置。

请注意,您的标题不正确 - 计时器确实正在停止,因为它不再滴答作响。如果您明白我的意思,计时器实际上并没有执行计时 - 它只是定期调用事件处理程序的一种方式。问题出在事件处理程序本身。

【讨论】:

    【解决方案2】:

    啊全局变量,祝福和诅咒在一起。
    当您按下按钮时,您是否已将 _myDateTime 重置为 DateTime.Now?

    【讨论】:

    • 我不想与否决者争论,但问题恰恰在于对全局变量的处理不当,而且,虽然我的回答不像 Skeet 先生的回答那样有据可查,但它是当然没有错。好吧,我们继续……
    【解决方案3】:

    当您停止计时器并重新启动它时,应将日期时间设置为现在。

    _myDateTime = DateTime.Now;
    

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多