Este comportamiento se puede solucionar de varias formas pero todas ellas implican trabajar con hilos.
En internet aparecen un montón de ejemplos usando la clase BackgroundWorker , pero aunque funciona, esta un poco obsoleta y, tal y como recomienda MSDN hay que usar la clase Task
Para estudiar este problema he escrito un ejemplo de prueba que resuelve este problema de las dos maneras
La situación de ejemplo es la siguiente:
Suponemos un cronometro inverso, que cuente los segundos que faltan para que acabe un proceso. De esta forma podremos usar los segundos que faltan para actualizar la propiedad [value] del ProgressBar .
Este problema (el de la falta de actualización de los valores de los controles) existe también con los demás controles que muestran información, Label, TextBox, etc, ya que se comportan de la misma manera que el ProgressBar. Si queremos actualizarlos TAMBIÉN tendremos que usar hilos
En este ejemplo mostramos en un control TextBox, una cadena que indica en minutos y segundos el tiempo que falta para que se acabe el proceso
Cuando se ejecuta el programa Muestra una ventana con tres botones [Aceptar], [Cancelar],[Terminar] una barra de progreso y un TextBox (dentro de la barra) que muestra el tiempo que falta
Imagen de la pantalla de este formulario XAML
