Вот проблема:
загрузка осуществляется отдельной веткой, и
индикатор выполнения находится в отдельной форме
вызывается дочерним потоком, когда
загрузка начинается
Если это означает, что ваш дочерний поток создал форму, то это проблема. Ваш дочерний поток может обновлять значения индикатора выполнения, но это просто сделает недействительным отображение и не обязательно обновит отображение. Когда дисплей элемента управления признан недействительным , он просто записывает, что он должен перерисовать свой дисплей в следующий раз, когда у него появится шанс. refresh - это когда элемент управления отображается на экране.
Лучше всего создать форму индикатора выполнения в потоке main .
Ваш рабочий поток может затем обновить статус, а ваш основной поток обновит отображение.
Помните одну вещь: если вы обновляете элемент управления, созданный в другом потоке, вы должны сделать это через диспетчер элемента управления.
var dispatcher = progressBar.Dispatcher;
dispatcher.BeginInvoke(new Action( () => { progressBar.Value = currentProgress }));
<ч />
Изменить после просмотра кода
Все, что вам нужно сделать, это переместить создание переменной прогресса так, чтобы оно создавалось основным потоком до создания рабочего потока.
<ч />
Progress win = new Progress();
win.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
win.Show();
System.Threading.Thread thread = new Thread(
new ThreadStart(
delegate()
{
// ...