The property
System.Windows.Threading.Dispatcher.CheckAccess
only tells you that the calling thread is the thread associated with
this Dispatcher (the instance of the dispatcher used as "this" in the call of this
instance property). It does not tell you that you can access UI methods/properties from this thread — if this is not the thread running the same UI,
you never can.
What do you thing is the purpose of the dispatcher? To cause the UI to call some delegate in the UI thread, through
Dispatcher.Invoke
or
Dispatcher.BeginInvoke
.
You cannot call anything related to UI from non-UI thread. Instead, you need to use the method
Invoke
or
BeginInvoke
of
System.Windows.Threading.Dispatcher
(for both Forms or WPF) or
System.Windows.Forms.Control
(Forms only).
You will find detailed explanation of how it works and code samples in my past answers:
Control.Invoke() vs. Control.BeginInvoke()[
^],
Problem with Treeview Scanner And MD5[
^].
See also more references on threading:
How to get a keydown event to operate on a different thread in vb.net[
^],
Control events not firing after enable disable + multithreading[
^].
—SA