A SynchronizationContext allows one thread to communicate with another thread. For example, to update the User Interface thread (UI Thread) from an outside thread you could do something like the following:
private readonly SynchronizationContext _sync = SynchronizationContext.Current; //Current Thread
_sync.Send((state) =>
{
Label1.Text = "Waiting…"; //Change Control properties from outside thread
Button1.Enabled = false;
}, null);