Прежде всего, чтобы показать модальное окно, все, что вам нужно сделать, это
myModalWindow.ShowDialog();
Если вы используете метод Show (), он просто покажет окно. Но если вы используете метод ShowDialog (), все остальные окна в вашем приложении WPF не будут реагировать на пользовательский ввод, пока это окно не закроется.
Во-вторых, вы можете обновить индикатор выполнения из другого потока с помощью диспетчера потока пользовательского интерфейса.
Application.Current.Dispatcher.BeginInvoke(() => myProgressBar.Value = progress);