5 out of 8 rated this helpful - Rate this topic

DispatcherTimer Class

A timer that is integrated into the Dispatcher queue which is processed at a specified interval of time and at a specified priority.

System.Object
  System.Windows.Threading.DispatcherTimer

Namespace:  System.Windows.Threading
Assembly:  WindowsBase (in WindowsBase.dll)
XMLNS for XAML: Not mapped to an xmlns.
public class DispatcherTimer

The DispatcherTimer type exposes the following members.

  Name Description
Public method DispatcherTimer() Initializes a new instance of the DispatcherTimer class.
Public method DispatcherTimer(DispatcherPriority) Initializes a new instance of the DispatcherTimer class which processes timer events at the specified priority.
Public method DispatcherTimer(DispatcherPriority, Dispatcher) Initializes a new instance of the DispatcherTimer class which runs on the specified Dispatcher at the specified priority.
Public method DispatcherTimer(TimeSpan, DispatcherPriority, EventHandler, Dispatcher) Initializes a new instance of the DispatcherTimer class which uses the specified time interval, priority, event handler, and Dispatcher.
Top
  Name Description
Public property Dispatcher Gets the Dispatcher associated with this DispatcherTimer.
Public property Interval Gets or sets the period of time between timer ticks.
Public property IsEnabled Gets or sets a value that indicates whether the timer is running.
Public property Tag Gets or sets a user-defined data object.
Top
  Name Description
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method Start Starts the DispatcherTimer.
Public method Stop Stops the DispatcherTimer.
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Top
  Name Description
Public event Tick Occurs when the timer interval has elapsed.
Top

The DispatcherTimer is reevaluated at the top of every Dispatcher loop.

Timers are not guaranteed to execute exactly when the time interval occurs, but they are guaranteed to not execute before the time interval occurs. This is because DispatcherTimer operations are placed on the Dispatcher queue like other operations. When the DispatcherTimer operation executes is dependent on the other jobs in the queue and their priorities.

If a System.Timers.Timer is used in a WPF application, it is worth noting that the System.Timers.Timer runs on a different thread then the user interface (UI) thread. In order to access objects on the user interface (UI) thread, it is necessary to post the operation onto the Dispatcher of the user interface (UI) thread using Invoke or BeginInvoke. Reasons for using a DispatcherTimer opposed to a System.Timers.Timer are that the DispatcherTimer runs on the same thread as the Dispatcher and a DispatcherPriority can be set on the DispatcherTimer.

A DispatcherTimer will keep an object alive whenever the object's methods are bound to the timer.

The following example creates a DispatcherTimer that updates the contents of a Label and calls the InvalidateRequerySuggested method on the CommandManager.

A DispatcherTimer object named dispatcherTimer is created. The event handler dispatcherTimer_Tick is added to the Tick event of dispatcherTimer. The Interval is set to 1 second using a TimeSpan object, and the timer is started.


//  DispatcherTimer setup
dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();


The Tick event handler updates a Label that displays the current second, and it calls InvalidateRequerySuggested on the CommandManager.


//  System.Windows.Threading.DispatcherTimer.Tick handler
//
//  Updates the current seconds display and calls
//  InvalidateRequerySuggested on the CommandManager to force 
//  the Command to raise the CanExecuteChanged event.
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    // Updating the Label which displays the current second
    lblSeconds.Content = DateTime.Now.Second;

    // Forcing the CommandManager to raise the RequerySuggested event
    CommandManager.InvalidateRequerySuggested();
}


.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
DispatcherTimer must be created (via new) and started on UI Thread
DispatcherTimer must be created (via new) and started on UI Thread.

It doesn't appear to work otherwise.