The Dispatcher
Each thread that creates user interface objects needs a Dispatcher object. This effectively owns the
thread, running a loop that dispatches input messages to the appropriate
handlers. (It performs a similar role to a message pump in Win32.) As
well as handling input, the dispatcher enables us to get calls directed
through to the right thread.
Tip
The Dispatcher class lives in
the System.Windows.Threading
namespace along with all other WPF-specific threading classes,
including DispatcherObject.
Obtaining a Dispatcher
Recall that all WPF objects with thread affinity derive from the
DispatcherObject base class. This
class defines a Dispatcher
property, which returns the Dispatcher object for the thread to which
the object belongs.
You can also retrieve the Dispatcher for the current thread by using
the Dispatcher.CurrentDispatcher
static property.
Getting Onto the Right Thread with a Dispatcher
If you need to update the user interface after doing some work
on a worker thread, you must make sure the update is done on the UI
thread. The Dispatcher provides
methods that let you invoke the code of your choice on the
dispatcher's thread.
You can use either Invoke or
BeginInvoke. Both of these accept
any delegate and an optional list of parameters. They both invoke the
delegate's target method on the dispatcher's thread, regardless of
which thread you call them from. Invoke does not return until the method has
been executed, whereas BeginInvoke queues the request to invoke the method, ...