When WPF application starts, it actually creates two threads automatically. One is Rendering Thread, which is hidden from the programmer, so you cannot use the rendering thread directly from your program; while the other is Dispatcher Thread, which actually holds all the UI elements. So in other words, you might say Dispatcher is actually the UI thread which ties all the elements created within the WPF application. Conversely, WPF requires all the UI elements to be tied with Dispatcher thread, this is called Thread Affinity. Thus you cannot change any element created on
thread from any other threads, thus it follows the same Win32 based APIs. Thus it allows you to inter-operate any WPF component into
based API. For more, 
is a class that handles thread affinity. It is actually a prioritized message loop through which all elements are channeled through. Every
is derived from
which defines a property called
which points to the UI thread. Thus from any other thread, if you want to invoke or access UI component, you need to Invoke using
actually has two chief duties, to check and verify if the thread has access to the object.