无法在C#中使用Windows窗体计时器停止计时

时间:2012-09-18 15:52:58

标签: c# forms timer

我在我的构造函数中初始化了一个Windows窗体定时器(并通过编写“pTimer.Enabled = true”在适当的时候设置它运行。在构造函数中 -

            pTimer = new Timer();
            pTimer.Enabled = false; 
            pTimer.Interval = timerSpeed;
            pTimer.Tick += new EventHandler(pTimer_Tick);

在计时器回调中,我正在检查我的工作是否已经完成。一旦它,我想停止计时器(从某种意义上说它不会继续调用pTimer_Tick回调)并关闭正在进行日志记录的streamwriter。

           private void pTimer_Tick(object sender, EventArgs e)
           {
                bool tempFinished = finished();
                log("finished() in timer tick = " + tempFinished.ToString());
                if (tempFinished)
                {
                     if (pTimer.Enabled == true)
                     {
                         log("We are going to stop the timer");
                         pTimer.Enabled = false;
                         Application.DoEvents();
                         log("We are going to close the streamwriter");
                         //myStreamWriter.Close();
                     }
                }
           }

似乎发生以下行为:

  1. 在pTimer_Tick中第一次完成()== true之后 回调,我们记录“完成()in timer tick = True”,以及代码 到达pTimer.Enabled = false
  2. 最初,我没有评论关闭流程图,这是因为它继续尝试写入从pTimer_Tick回调记录的代码而产生错误
  3. 如果我们注释掉myStreamWriter.Close(); (如上所述),在1.发生后,代码确实似乎继续重新输入pTimer_Tick回调,它在到达“bool tempFinished = finished()”行时运行finished()方法,并且内部日志到达完成()方法表示它将按预期再次输出“true”,但是下一行的日志记录“log(在timer tick中的”finished()=“+ tempFinished.ToString());”永远不会失败,日志中出现的下一件事就是再次访问finished()函数的代码。
  4. 有没有人对这里可能出错的地方有任何建议?

    谢谢! 克里斯

1 个答案:

答案 0 :(得分:-1)

您正在通过设置Enabled属性来启动和停止计时器。虽然你在评论中声称这已经足够了,但我并不相信。

请尝试使用StartStop计时器功能。