I’ve found little information on how to properly use the Dispatcher class on its own.
Currently I am using it similar to this question, but there is an inherent race condition which I do not see mentioned anywhere.
Assuming you use the following code to start a dispatcher thread:
Thread thread = new Thread(Dispatcher.Run);
thread.Start();
And try to use it later:
Dispatcher.FromThread(thread).Invoke(MyMethodDelegate);
This will often throw a NullReferenceException as the Dispatcher.FromThread call may return null since there is no guarantee that Dispatcher.Run has been called yet.
What I’ve done to implement this properly is to use a signal to ensure the dispatcher is running before continuing to use it on the main thread.
Here is what I ended up doing, which is what I believe you need to do in order to use the Dispatcher properly.
After InitDispatcher returns, you can use
or
to marshal calls to the dispatcher thread.