C-怎么停止计时器?

我知道这听起来很蠢,但我已经试过所有办法来阻止计时器了,但是计时器停不下来。我在做一个游戏,如果有人能告诉我怎么停止计时器,我会很感激的。

115619 次浏览

假设您正在使用该系统。窗户。表格。计时器; 因为没有明确的参考,任何其他... 如果是这样的话..。

System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Stop();

如果您正在使用 System.Timers.Timer停止是由以下选项之一执行的:

//options 1
timer.Enabled = false
//option 2
timer.Stop()

如果使用 System.Threading.Timer,请使用此方法

timer.Change(Timeout.Infinite , Timeout.Infinite)

如果使用 System.Windows.Forms.Timer,请使用此方法

timer.Stop();

系统。视窗。窗体。计时器: timer.Enabled = false;
系统。线程。定时器: timer.Change(Timeout.Infinite, Timeout.Infinite);
系统。定时器。定时器: timer.Enabled = false;timer.Stop();

中的每个计时器。NET 框架,这是可能的计时器触发之前,你停止它,所以你会看到回调后,你停止它。

您需要使用类似于 异步回调上下文的东西: 当您希望计时器运行时,使用设置为 truebool,并在停止计时器时将其设置为 false。然后让你的回调函数检查你的上下文,看看它是否真的应该运行。

要看时间了。如果它来自线程命名空间,则在需要时释放它并重新创建它,或者让计时器委托等待重置事件(参见 我不知道)。系统。Timers 命名空间具有启动和停止方法。

因此,如果您正在使用 System.Threading.Timer 类, 这将永久性地停止它,不再有机会使用同一个实例:

   timer.Dispose()

否则:

  timer.Change(Timeout.Infinite, Timeout.Infinite)

我也多次遇到类似的问题。

//Timer init.
var _timer = new System.Timers.Timer
{
AutoReset = true,
Enabled = true,
Interval = TimeSpan.FromSeconds(15).TotalMilliseconds //15 seconds interval
};
_timer.Elapsed += DoSomethingOnTimerElapsed;




//To be called on timer elapsed.
private void DoSomethingOnTimerElapsed(object source, ElapsedEventArgs e)
{
//Disable timer.
_timer.Enabled = false; //or _timer.Stop()
try
{
//does long running process
}
catch (Exception ex)
{


}
finally
{
if (_shouldEnableTimer) //set its default value to true.
_timer.Enabled = true; //or _timer.Start()
}
}




//somewhere in the code if you want to stop timer:
_timer.Enabled = _shouldEnableTimer = false;


//At any point, if you want to resume timer add this:
_timer.Enabled = _shouldEnableTimer = true;

为什么要这样做?

让我们假设,try 块中的代码需要更多的时间。因此,当您禁用计时器(_timer.Enabled = false or _timer.Stop())时,try 块中的代码仍然在执行的可能性很大。因此,在最终完成任务之后,如果没有标记(_shouldEnableTimer)检查,它将再次启用。因此,我通过添加额外的标志检查来防止您的问题。

为了更清晰,请通过代码和添加的注释。希望这有所帮助。