Search code examples
c#winformsmultithreadinginvokerequiredsynchronizationcontext

SynchronizationContext and InvokeRequired


I have been looking all over for an answer to this question, but can't seem to find a satisfactory answer. Maybe someone here can enlighten me.

I have a descendent of BindingList<T> that stores a reference to a SynchronizationContext object in order to raise its changed events on the UI thread.

Now, it's also possible that this BindingList<T> was created and used on the UI thread and not a background thread. How do I check this without a property like InvokeRequired available to me? What are the consequences of calling SynchronizationContext.Send on the UI thread?


Solution

  • The Send method on SynchronizationContext will execute synchronously and call the delegate on the thread to which the SynchronizationContext is bound. If the SynchronizationContext is bound to the UI thread and the code is currently executing on the UI thread then the delegate will just be invoked directly with no need to marshal between threads.