我知道这听起来很愚蠢,但是我已经尝试了一切来停止计时器,但是计时器不会停止。我正在开发游戏,如果有人可以告诉我如何停止计时器,我将不胜感激。
我知道这听起来很愚蠢,但是我已经尝试了一切来停止计时器,但是计时器不会停止。我正在开发游戏,如果有人可以告诉我如何停止计时器,我将不胜感激。
Answers:
如果您正在使用System.Timers.Timer
,可以像这样停止
timer.Enabled = false
如果您正在使用System.Threading.Timer
,请使用
timer.Change(Timeout.Infinite , Timeout.Infinite)
或使用
timer.Stop();
如果您正在使用 System.Windows.Forms.Timer
我也多次遇到类似的问题。
//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块中的代码仍在执行。因此,在完成最后的任务之后,如果没有flag(_shouldEnableTimer
)检查,则会再次启用它。因此,我通过添加其他标志检查来防止出现您的问题。
为了更清晰,请遍历代码和添加的注释。希望这可以帮助。