В большинстве случаев у нас один поток пользовательского интерфейса. Так что, это не имеет значения, что вы звоните
control.Dispatcher(which comes inherited from DispatcherObject parent of the controls).
or
Disptacher.Current.
Но есть сценарии, в которых у вас будет несколько диспетчеров.
Таким образом, в этой ситуации Control.Dispatcher поможет, так как он обнаружит текущего диспетчера для соблюдения Thread Affinity. В этом Dispatcher.Current не поможет.
Один сценарий с выделенным потоком (с диспетчером) для отображения индикатора занятости, поскольку поток пользовательского интерфейса по умолчанию занят рендерингом большого списка элементов управления.
Однако SynchronizationContext - это еще один способ избежать подобных проблем. но что, если этот контекст или поток больше не требуются или он был установлен в null любым другим разработчиком Поэтому, на мой взгляд, всегда разумно использовать Control.Dispatcher.