尝试更新DispatcherTimer的间隔,并不总是有效

时间:2014-05-17 11:24:01

标签: c# wpf dispatchertimer

我正在尝试制作一个Snake游戏。我想要发生的事情是,每当蛇吃掉一块食物,它就会更快地移动。

我想通过让计时器更快点来做到这一点。

我在间隔时间启动计时器:

gltimer.Interval = new TimeSpan(20000)

并用以下内容进行更新:

public void updateTimer(object sender, EventArgs e)
{
    long nrTicks = gltimer.Interval.Ticks;
    nrTicks = (long)(nrTicks * 0.95);
    gltimer.Interval = new TimeSpan(nrTicks);
}

但是当我运行我的游戏时,速度保持不变,直到我达到第14个零食,然后突然变化。我已经发现nrTicks然后降到10000以下。

我的问题是为什么Interval没有更新中间值?

1 个答案:

答案 0 :(得分:2)

DispatcherTimer并非旨在以精确的间隔执行操作。

当它以确切的间隔调度操作时,调度的操作将被执行,当你的情况下的GUI线程wpf应用程序循环决定这样做。

您将间隔设置为20.000个刻度会导致间隔为20.000 * 100ns = 2.000.000ns = 2ms。 wpf应用程序的分辨率最多约为10毫秒。

查看这些帖子: