BackgroundWorker - это инструмент, помогающий абстрагировать обработку потоков, но опубликованный вами код использует его странным образом:
Событие, прикрепленное к нему в DoWork ( worker_DoWorkPipeline_Click ) будет работать в потоке, отличном от пользовательского интерфейса, однако, так как весь метод включен в вызов Dispatcher, все aLongFunction будут выполняться в том же потоке, что и пользовательский интерфейс.
From Ваше описание ошибки, проблема в том, что индикатор выполнения перестает анимироваться, верно? Причина этого заключается в том, что пользовательский интерфейс не реагирует на запросы при выполнении кода в его потоке с помощью Dispatcher.Invoke.
Решение этой проблемы заключается в удалении метода Invoke из worker_DoWorkPipeline_Click .
Однако если код в SynchronizationSession обращается к каким-либо объектам пользовательского интерфейса в вашем проекте, вы можете ожидать исключения для этого, поскольку объекты пользовательского интерфейса WPF обычно доступны только в одном потоке. Вы не предоставили код для функции, поэтому мы не можем определить, из чего вы ее предоставили.
Если SynchronizationSession или что-либо еще, работающее в Backgroundworker, нуждается в обновлении пользовательского интерфейса, используйте Dispatcher.Invoke только для той части кода, которая требует обновления интерфейса пользователя . Это позволит избежать блокировки пользовательского интерфейса для всей операции, но делать это только при необходимости.