定时器C#Stop()并没有真正停止

时间:2012-12-07 11:11:52

标签: c# timer

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

我的问题是计时器然后从多长时间开始,直到我按下另一个表格上的按钮而不是从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()的实例,所以在Points表单中我有按钮1,我在它的事件处理程序中除了与计时器无关的其他内容之外:{{1 }}

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

我做错了什么?

3 个答案:

答案 0 :(得分:2)

  

我的问题是计时器然后从多长时间开始,直到我按下另一个表格上的按钮,而不是再次从0点开始。

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

_myDateTime = DateTime.Now;