在 Silverlight 北京站中,我向大家介绍了在 Silverlight 2 中,你可以使用 Storyboard 实现定时器,你也可以通过 code behind ,应用类似桌面端程序的方法实现定时器 (Timer) 的实现。

下面我就如何通过建立 System.Windows.Threading.DispatcherTimer 对象来实现 Silverlight 2 定时器的方法。

以下是通过使用 DispatcherTimer 对象,实现的 Silverlight 2 计时器。

image

1. 首先在场景中置入一个 <TextBlock /> 和一个 <Button />

   1: <Canvas x:Name="myCon" Height="300" Width="400" >
   2:             <TextBlock x:Name="myText" FontSize="50" Canvas.Left="180" Canvas.Top="40" Text="0"></TextBlock>
   3:         </Canvas>
   4:         <Button x:Name="myBtn" Height="50" Width="100" MouseLeftButtonDown="myBtn_MouseLeftButtonDown"></Button>

2. 声明 Dispatcher 对象 myTimer

DispatcherTimer myTimer = new DispatcherTimer();

3. 在页面加载后声明按钮初始化内容、myTimer 属性

   1: myBtn.Content = "start";
   2: myTimer.Interval = new TimeSpan(0, 0, 0, 1);
   3: myTimer.Tick += new EventHandler(myTimer_Tick);
 
4. 声明布尔变量状态机 myState,实现鼠标左键单击事件
   1: if (myState)
   2:             {
   3:                 myTimer.Start();
   4:                 myBtn.Content = "Stop";
   5:             }
   6:             else
   7:             {
   8:                 myTimer.Stop();
   9:                 myBtn.Content = "Start";
  10:             }
  11:             myState = !myState;

5. 声明 myTimer_Tick 事件

   1: int i = 0;
   2:  
   3: void myTimer_Tick(object sender, EventArgs e)
   4: {
   5:     myText.Text = i++.ToString();
   6: }

这个例子的源码你可以从这里下载: