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