Обновить/обновить текстовое поле и индикатор выполнения при запуске подпрограммы в приложении vb.net wpf

У меня есть несколько отчетов, которые все сливаются в одну и ту же таблицу данных. Пользователь может щелкнуть несколько для запуска, а затем нажать кнопку «Найти записи», чтобы запустить их все одновременно. Поскольку каждый из них занимает так много времени, я хотел бы обновить пользователя в строке состояния, поскольку каждая из этих хранимых процедур вызывается успешно. Однако, когда я вызываю процедуру, я получаю только одно обновление в самом конце со списком всего.

Что я хотел бы сделать:

'Initialize Progress Components
repCompleted = 0
ProgressBar1.Minimum = 0
ProgressBar1.Maximum = repSel
ProgressBar1.Value = repCompleted
TextBlock2.Text = repCompleted & " of " & repSel & " reports finished"

Затем, когда каждый отчет будет успешно запущен, обновите значение repCompleted и обновите его.

repCompleted += 1
TextBlock2.Text = repCompleted & " of " & repSel & " reports finished"
ProgressBar1.Value = repCompleted

Проблема в том, что эти обновления не происходят, пока я не выйду из подпрограммы. Я бы хотел, чтобы он считался вперед по мере завершения каждого, т.е. 1 of 4 completed, 2 of 4 completed и т. д.

Любые идеи?


person KyleMit    schedule 03.05.2012    source источник


Ответы (1)


Если ваш процесс выполняется на переднем плане (а не в фоновом), он блокирует пользовательский интерфейс. Вы должны запустить его в фоновом режиме, чтобы ваш пользовательский интерфейс мог делать что-то еще (например, обновлять индикатор выполнения). Взгляните на класс BackgroundWorker, он позволяет вам сделать именно это.

person NestorArturo    schedule 03.05.2012