I seem not to find how to get the SynchronizationContext
of a given Thread
:
Thread uiThread = UIConfiguration.UIThread;
SynchronizationContext context = uiThread.Huh?;
Why should I need that?
Because I need to post to the UIThread from different spots all across the front end application. So I defined a static property in a class called UIConfiguration
. I set this property in the Program.Main
method:
UIConfiguration.UIThread = Thread.CurrentThread;
In that very moment I can be sure I have the right thread, however I cannot set a static property like
UIConfiguration.SynchronizationContext = SynchronizationContext.Current
because the WinForms implementation of that class has not yet been installed. Since each thread has it's own SynchronizationContext, it must be possible to retrieve it from a given Thread
object, or am I completely wrong?
This is not possible. The problem is that a SynchronizationContext
and a Thread
are really two completely separate concepts.
While it's true that Windows Forms and WPF both setup a SynchronizationContext
for the main thread, most other threads do not. For example, none of the threads in the ThreadPool contain their own SynchronizationContext (unless, of course, you install your own).
It's also possible for a SynchronizationContext
to be completely unrelated to threads and threading. A synchronization context can easily be setup that synchronizes to an external service, or to an entire thread pool, etc.
In your case, I'd recommend setting your UIConfiguration.SynchronizationContext
within the initial, main form's Loaded event. The context is guaranteed to be started at that point, and will be unusable until the message pump has been started in any case.