sách gpt4 ai đã đi

Hành vi khác nhau của System.Timers.Timer và System.Threading.Timer

In lại 作者:行者123 更新时间:2023-11-30 20:55:48 28 4
mua khóa gpt4 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 网络服务器的方法链之后调用。

1 Câu trả lời

有一个bưu kiện关于 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/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com