gpt4 book ai didi

c# - System.Timers.Timer 和 System.Threading.Timer 的不同行为

转载 作者:行者123 更新时间:2023-11-30 20:55:48 27 4
gpt4 key购买 nike

首先我要说的是,与其说这是一个需要解决的问题,不如说这是一个问题。我现在有了解决方案,对我来说一切正常。但是我想知道为什么第一次出现问题。

这是我现在拥有的代码,它的工作方式与我预期的一样:

    private void OnNewGameStarted(Game game)
{
_activeGames.Add(game);

TimeSpan delay = game.GetTimeLeft();
var timer = new Timer(delay.TotalMilliseconds) {AutoReset = false};
timer.Elapsed += (sender, args) => GameEndedCallback(game);
timer.Start();
}

private void GameEndedCallback(Game game)
{
if (_statisticsManager.RegisterGame(game))
_gamesRepository.Save(game);

_gameStatusSubscriber.GameStatusChanged(game);
}

我曾经使用 System.Threading.Timer 而不是 System.Timers.Timer,有时会触发计时器事件(GameEndedCallback 方法),有时不会。我找不到任何原因。

这是我用来初始化定时器的代码(其他部分相同):

            TimeSpan delay = game.GetTimeLeft();
new Timer(GameEndedCallback,game,(int)delay.TotalMilliseconds,Timeout.Infinite);
}

private void GameEndedCallback(object state)
{
var game = (Game) state;

方法 OnNewGameStarted 是事件处理程序,当某些特定消息到达它时,它会在 Fleck 网络服务器的方法链之后调用。

最佳答案

有一个post关于 3 种计时器类型以及它们的作用。主要的事情是:

  • System.Timers.Timer 用于多线程工作
  • System.Windows.Forms.Timer - 来自应用程序 UI 线程
  • System.Threading.Timer - 并不总是线程安全的!

关于c# - System.Timers.Timer 和 System.Threading.Timer 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18072831/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com