WPF and Silverlight Timer

Users of Windows Forms will know that there are three timer objects you can use, namely the Windows Forms Timer, the System Timers Timer and finally the System Threading Timer, as the following example demonstrates;

Note: this tutorial is in both C# and Visual Basic, so look beneath the Visual Basic examples for the C# Version.

Visual Basic

Public Class Form1


    Dim timerCallBack As System.Threading.TimerCallback


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ”Winforms Timer

        Dim wfTimer As System.Windows.Forms.Timer()


        ”Timers Timer

        Dim tTimer As System.Timers.Timer()


        ”Threading Timer

        timerCallBack = AddressOf PrintTime

        Dim thTimer As System.Threading.Timer = New System.Threading.Timer(Me.timerCallBack)



    End Sub


    Private Sub PrintTime(ByVal obj As System.Object)

        ”Print the time to screen

    End Sub



End Class


using System.Windows.Forms;


namespace TimersExample


    public partial class Form1 : Form


        System.Threading.TimerCallback timerCallBack;


        public Form1()




        private void Form1_Load(object sender, System.EventArgs e)


            // Winforms Timer

            System.Windows.Forms.Timer wfTimer = new Timer();


            //Timers Timer

            System.Timers.Timer tTimer = new System.Timers.Timer();


            //Threading Timer

            timerCallBack = new System.Threading.TimerCallback(PrintTime);

            System.Threading.Timer thTimer = new System.Threading.Timer(this.timerCallBack);


        private void PrintTime(object obj)


            //Print the time to screen






In both WPF and Silverlight there is a new timer (the fourth .NET framework timer) called the System.Windows.Threading.DispatcherTimer. To demonstrate how this works, look at the following simple code sample. In it, there is some XAML that declares a label, button and a button click and window loaded events (In Silverlight use the UserControl_Loaded event for the page instead of Window_Loaded).


<Window x:Class="WpfTimer.Window1"



   Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">



        <StackPanel Orientation="Vertical">

        <Label Height="28" Width="70" Name="label1">Label</Label>

        <Button Height="23" Width="70" Name="button1" Click="button_Click">Button</Button>







Note that in the Visual Basic XAML you have Window x:Class="Window1" at the top (in case you’re wondering why the XAML does not compile). In the code behind, you have the following code that instantiates a DispatcherTimer in the load event of the Window, and allows a user from starting and stopping the timer by toggling the button click event.


Visual Basic

Class Window1

    Dim timer As System.Windows.Threading.DispatcherTimer

    Public Event UpdateTime()


    Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs)

        timer = New System.Windows.Threading.DispatcherTimer()

        timer.Interval = TimeSpan.FromSeconds(1)

        AddHandler timer.Tick, AddressOf timer_Tick


    End Sub


    Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs)

        Me.label1.Content = DateTime.Now.ToLongTimeString()

    End Sub


    Private Sub button1_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)

        If Not Me.timer.IsEnabled Then


            Me.button1.Content = "Stop"



            Me.button1.Content = "Start"

        End If

    End Sub





End Class



using System;

using System.Windows;


namespace WpfTimer


    /// <summary>

    /// Interaction logic for Window1.xaml

    /// </summary>

    public partial class Window1 : Window


        System.Windows.Threading.DispatcherTimer timer;


        public Window1()




        private void Window_Loaded(object sender, RoutedEventArgs e)


            timer = new System.Windows.Threading.DispatcherTimer();

            timer.Interval = TimeSpan.FromSeconds(1);

            timer.Tick += new EventHandler(timer_Tick);



        void timer_Tick(object sender, EventArgs e)


            this.label1.Content = DateTime.Now.ToLongTimeString();



        private void button_Click(object sender, RoutedEventArgs e)


            if (!this.timer.IsEnabled)



                this.button1.Content = "Stop";





                this.button1.Content = "Start";









Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s