Dispatcher Class (System.Windows.Threading)

Cambia visualizzazione:
ScriptFree
.NET Framework Class Library
Dispatcher Class

[This documentation is for preview only, and is subject to change in later releases. Blank topics are included as placeholders.]

Provides services for managing the queue of work items for a thread.

Inheritance Hierarchy

System.Object
  System.Windows.Threading.Dispatcher

Namespace:  System.Windows.Threading
Assembly:  WindowsBase (in WindowsBase.dll)
Syntax

Visual Basic

Public NotInheritable Class Dispatcher
C#

public sealed class Dispatcher
Visual C++

public ref class Dispatcher sealed
F#

[<Sealed>]
type Dispatcher =  class end

The Dispatcher type exposes the following members.

Properties

  Name Description
Public property Static member CurrentDispatcher Gets the Dispatcher for the thread currently executing and creates a new Dispatcher if one is not already associated with the thread.
Public property HasShutdownFinished Determines whether the Dispatcher has finished shutting down.
Public property HasShutdownStarted Determines whether the Dispatcher is shutting down.
Public property Hooks Gets the collection of hooks that provide additional event information about the Dispatcher.
Public property Thread Gets the thread this Dispatcher is associated with.
Top
Methods

  Name Description
Public method BeginInvoke(Delegate, Object[]) Executes the specified delegate asynchronously with the specified arguments on the thread that the Dispatcher was created on.
Public method BeginInvoke(DispatcherPriority, Delegate) Executes the specified delegate asynchronously at the specified priority on the thread the Dispatcher is associated with.
Public method BeginInvoke(Delegate, DispatcherPriority, Object[]) Executes the specified delegate asynchronously with the specified arguments, at the specified priority, on the thread that the Dispatcher was created on.
Public method BeginInvoke(DispatcherPriority, Delegate, Object) Executes the specified delegate asynchronously at the specified priority and with the specified argument on the thread the Dispatcher is associated with.
Public method BeginInvoke(DispatcherPriority, Delegate, Object, Object[]) Executes the specified delegate asynchronously at the specified priority and with the specified array of arguments on the thread the Dispatcher is associated with.
Public method BeginInvokeShutdown Initiates shutdown of the Dispatcher asynchronously.
Public method CheckAccess Determines whether the calling thread is the thread associated with this Dispatcher.
Public method DisableProcessing Disables processing of the Dispatcher queue.
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Public method Static member ExitAllFrames Requests that all frames exit, including nested frames.
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 Static member FromThread Gets the Dispatcher for the specified thread.
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.)
Public method Invoke(Action) Executes the specified Action synchronously on the thread the Dispatcher is associated with.
Public method Invoke(Action, DispatcherPriority) Executes the specified Action synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method Invoke(Delegate, Object[]) Executes the specified delegate with the specified arguments synchronously on the thread the Dispatcher is associated with.
Public method Invoke(DispatcherPriority, Delegate) Executes the specified delegate synchronously at the specified priority on the thread on which the Dispatcher is associated with.
Public method Invoke(Action, DispatcherPriority, CancellationToken) Executes the specified Action synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method Invoke(Delegate, TimeSpan, Object[]) Executes the specified delegate within the designated time span at the specified priority with the specified arguments synchronously on the thread the Dispatcher is associated with.
Public method Invoke(Delegate, DispatcherPriority, Object[]) Executes the specified delegate at the specified priority with the specified arguments synchronously on the thread the Dispatcher is associated with.
Public method Invoke(DispatcherPriority, Delegate, Object) Executes the specified delegate at the specified priority with the specified argument synchronously on the thread the Dispatcher is associated with.
Public method Invoke(DispatcherPriority, TimeSpan, Delegate) Executes the specified delegate synchronously at the specified priority and with the specified time-out value on the thread the Dispatcher was created.
Public method Invoke(Action, DispatcherPriority, CancellationToken, TimeSpan) Executes the specified Action synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method Invoke(Delegate, TimeSpan, DispatcherPriority, Object[]) Executes the specified delegate within the designated time span at the specified priority with the specified arguments synchronously on the thread the Dispatcher is associated with.
Public method Invoke(DispatcherPriority, Delegate, Object, Object[]) Executes the specified delegate at the specified priority with the specified arguments synchronously on the thread the Dispatcher is associated with.
Public method Invoke(DispatcherPriority, TimeSpan, Delegate, Object) Executes the specified delegate at the specified priority with the specified argument synchronously on the thread the Dispatcher is associated with.
Public method Invoke(DispatcherPriority, TimeSpan, Delegate, Object, Object[]) Executes the specified delegate at the specified priority with the specified arguments synchronously on the thread the Dispatcher is associated with.
Public method Invoke<TResult>(Func<TResult>) Executes the specified Func<TResult> synchronously on the thread the Dispatcher is associated with.
Public method Invoke<TResult>(Func<TResult>, DispatcherPriority) Executes the specified Func<TResult> synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method Invoke<TResult>(Func<TResult>, DispatcherPriority, CancellationToken) Executes the specified Func<TResult> synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method Invoke<TResult>(Func<TResult>, DispatcherPriority, CancellationToken, TimeSpan) Executes the specified Func<TResult> synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method InvokeAsync(Action) Executes the specified Action asynchronously on the thread the Dispatcher is associated with.
Public method InvokeAsync(Action, DispatcherPriority) Executes the specified Action asynchronously at the specified priority on the thread the Dispatcher is associated with.
Public method InvokeAsync(Action, DispatcherPriority, CancellationToken) Executes the specified Action asynchronously at the specified priority on the thread the Dispatcher is associated with.
Public method InvokeAsync<TResult>(Func<TResult>) Executes the specified Func<TResult> asynchronously on the thread the Dispatcher is associated with.
Public method InvokeAsync<TResult>(Func<TResult>, DispatcherPriority) Executes the specified Func<TResult> asynchronously at the specified priority on the thread the Dispatcher is associated with.
Public method InvokeAsync<TResult>(Func<TResult>, DispatcherPriority, CancellationToken) Executes the specified Func<TResult> synchronously at the specified priority on the thread the Dispatcher is associated with.
Public method InvokeShutdown Initiates the shutdown process of the Dispatcher synchronously.
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Public method Static member PushFrame Enters an execute loop.
Public method Static member Run Pushes the main execution frame on the event queue of the Dispatcher.
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Public method Static member ValidatePriority Determines whether the specified DispatcherPriority is a valid priority.
Public method VerifyAccess Determines whether the calling thread has access to this Dispatcher.
Public method Static member Yield() Creates an awaitable object that asynchronously yields control back to the current dispatcher and provides an opportunity for the dispatcher to process other events.
Public method Static member Yield(DispatcherPriority) Creates an awaitable object that asynchronously yields control back to the current dispatcher and provides an opportunity for the dispatcher to process other events. The work that occurs when control returns to the code awaiting the result of this method is scheduled with the specified priority.
Top
Events

  Name Description
Public event ShutdownFinished Occurs when the Dispatcher finishes shutting down.
Public event ShutdownStarted Occurs when the Dispatcher begins to shut down.
Public event UnhandledException Occurs when a thread exception is thrown and uncaught during execution of a delegate by way of Invoke or BeginInvoke.
Public event UnhandledExceptionFilter Occurs when a thread exception is thrown and uncaught during execution of a delegate by way of Invoke or BeginInvoke when in the filter stage.
Top
Extension Methods

  Name Description
Public Extension Method BeginInvoke(Action) Overloaded. Executes the specified delegate asynchronously with normal priority on the thread that the specified Dispatcher was created on. (Defined by DispatcherExtensions.)
Public Extension Method BeginInvoke(Action, DispatcherPriority) Overloaded. Executes the specified delegate asynchronously with the specified priority on the thread that the specified Dispatcher was created on. (Defined by DispatcherExtensions.)
Public Extension Method Invoke(Action) Overloaded. Executes the specified delegate synchronously with normal priority on the thread that the specified Dispatcher was created on. (Defined by DispatcherExtensions.)
Public Extension Method Invoke(Action, TimeSpan) Overloaded. Executes the specified delegate synchronously on the thread that the specified Dispatcher was created on, and stops execution after the specified time-out period. (Defined by DispatcherExtensions.)
Public Extension Method Invoke(Action, DispatcherPriority) Overloaded. Executes the specified delegate synchronously with the specified priority on the thread that the specified Dispatcher was created on. (Defined by DispatcherExtensions.)
Public Extension Method Invoke(Action, TimeSpan, DispatcherPriority) Overloaded. Executes the specified delegate synchronously with the specified priority on the thread that the specified Dispatcher was created on, and stops execution after the specified time-out period. (Defined by DispatcherExtensions.)
Top
Remarks

The Dispatcher maintains a prioritized queue of work items for a specific thread.

When a Dispatcher is created on a thread, it becomes the only Dispatcher that can be associated with the thread, even if the Dispatcher is shut down.

If you attempt to get the CurrentDispatcher for the current thread and a Dispatcher is not associated with the thread, a Dispatcher will be created. A Dispatcher is also created when you create a DispatcherObject. If you create a Dispatcher on a background thread, be sure to shut down the dispatcher before exiting the thread.

If a Dispatcher is shut down, it cannot be restarted.

In WPF, a DispatcherObject can only be accessed by the Dispatcher it is associated with.  For example, a background thread cannot update the contents of a Button that is associated with the Dispatcher on the UI thread. In order for the background thread to access the Content property of the Button, the background thread must delegate the work to the Dispatcher associated with the UI thread. This is accomplished by using either Invoke or BeginInvokeInvoke is synchronous and BeginInvoke is asynchronous. The operation is added to the queue of the Dispatcher at the specified DispatcherPriority.

If BeginInvoke is called on a Dispatcher that has shut down, the status property of the returned DispatcherOperation is set to Aborted.

All of the methods on Dispatcher, with the exception of DisableProcessing, are free-threaded.

Objects that derive from DispatcherObject have thread affinity.

Objects that derive from Freezable are free-threaded when they are frozen. For more information, see Freezable Objects Overview.

Examples

The following example shows how to place an operation onto a Dispatcher. For the full source code of this example, see Single-Threaded Application with Long-Running Calculation Sample.

First, a delegate is created that accepts no arguments.

Visual Basic

Public Delegate Sub NextPrimeDelegate()


C#

public delegate void NextPrimeDelegate();


Next, BeginInvoke(DispatcherPriority, Delegate) is called. This call to BeginInvoke(DispatcherPriority, Delegate) takes two parameters: the priority, which is set to DispatcherPriority.Normal, and the callback, which is passed in through an instance of the delegate NextPrimeDelegate.

Visual Basic

startStopButton.Dispatcher.BeginInvoke(DispatcherPriority.Normal, New NextPrimeDelegate(AddressOf CheckNextNumber))


C#

startStopButton.Dispatcher.BeginInvoke(
    DispatcherPriority.Normal,
    new NextPrimeDelegate(CheckNextNumber));


Version Information

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
Platforms

Windows 8 Release Preview, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 SP2, Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
See Also

Reference

Other Resources