1

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

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

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

           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回调中第一次finished()==true之后,我们记录“finished() in timer tick = True”,代码达到pTimer.Enabled = false
  2. 最初,我没有注释掉关闭流写入器,这会产生错误,因为它继续尝试写入从 pTimer_Tick 回调记录的代码
  3. 如果我们注释掉 myStreamWriter.Close(); (如上所述),1.发生后,代码确实似乎不断重新进入pTimer_Tick回调,它在到达“bool tempFinished=finished()”行时运行finished()方法,并将内部日志记录到finished () 方法表明它将再次按预期输出“true”,但下一行的日志记录“log(”finished() in timer tick = “+ tempFinished.ToString());” 永远不会宕机,接下来出现在日志中的是再次访问finished()函数的代码。

有人对这里可能出现的问题有任何建议吗?

谢谢!克里斯

4

1 回答 1

-1

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

尝试改用StartStop计时器功能。

于 2012-09-18T16:52:11.650 回答