【问题标题】:Timer stops entire program定时器停止整个程序
【发布时间】:2019-03-27 11:43:18
【问题描述】:

所以我刚刚在 WinForms 中做了一个简单的蛇游戏,我只剩下一个问题了。我的想法是我将实施一个加速玩家 10 秒的加电。我试过使用线程。 sleep 方法来创建一个计时器,但它会使整个程序休眠。我也尝试过使用task.delay 方法,但没有成功。

我是在以错误的方式解决这个问题,还是我只是错过了什么?你有什么建议可以让我走上正确的道路吗?我对此很陌生,所以这可能很容易解决。

    var watch = new Stopwatch();
    watch.Start();

    using (var task = Task.Delay(10000))
    {
        speedUp = true;
        task.Wait();
    }

    watch.Stop();
    speedUp = false;

这是我对延迟的尝试。但它似乎将整个程序暂停了 10 秒钟,然后才继续。

谢谢

【问题讨论】:

  • 您不应该在大多数实际代码中使用sleep。使用delay 展示您的尝试并说明问题所在。
  • 你为什么不实际使用计时器? Task.Delay 不会冻结,除非代码使用 .Wait() 明确阻止等待它

标签: c#


【解决方案1】:

您可能希望通过查看游戏循环中的时钟来查看过去的时间。属性Environment.TickCount 为您提供自上次启动以来的毫秒数,或者您可以使用DateTime or Timespan 来完成。现在,您可以检查自启动电源以来是否已经过去了 10'000 毫秒,而不是休眠。这样一来,什么都不会被阻塞,并且在 10 秒内收集多个能量提升不会搞砸停用过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多