Если образно, то приблизительно вот так:

У вас есть несколько потоков, которые выполняют какие-то действия. Допустим поток получил данный из базы данных и ему надо обновить интерфейс. В .NET обновлять интерфейс может только GUI-поток, поэтому остальные потоки могут через контекст синхронизации
(вызовом метода Post объекта SynchronizationContext) передать метод, который будет выполняться уже в GUI-потоке. Такая схема актуальна для приложений с пользовательским интерфейсом. Консольные приложения и службы Windows не имеют контекста синхронизации
(т.е. свойство SynchronizationContext равно null).