在Silverlight Mobile中实现DispatchTimer

时间:2010-11-13 22:06:10

标签: c# silverlight windows-phone-7

我正在为WP7制作骰子游戏,每回合涉及多个滚动。在CPU转向期间,我需要减慢进程的速度,以便用户可以看到正在发生的事情。经过一番挖掘后,我发现DispatchTimer可以这种方式使用。

问题是,我不知道这是如何运作的。查看MSDN文档只会让我感到头脑发热,大多数在线示例都将其与按钮按下或鼠标点击相关联。

所以我所拥有的是一个while循环,它调用我的骰子滚动功能五次并更改骰子图像以显示结果。

现在计时器的代码是:

DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();

然后:

  private void dispatcherTimer_Tick(object sender, EventArgs e)
{
   int i = 0; 
   do
   {
      cpuTurn();
      i++;
   }
   while(i < 6);
}

但这不起作用。那么我做错了什么?我是以错误的方式使用计时器吗?

1 个答案:

答案 0 :(得分:4)

是的,在事件处理程序完成之前,显示不会更新。只调用一次cpuTurn()。将循环计数器移到方法之外,使其成为类成员。当它计数到6时调用dispatcherTimer.Stop()。当CPU再次转向时,重置计数器并调用Start()。

Google“事件驱动编程”,以了解有关编写GUI代码时所需编程类型的更多信息。