Cargar progressbar en WPF

Código C#
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Data;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Imaging;
usingSystem.Windows.Navigation;
usingSystem.Windows.Shapes;
namespace progressbarwpf
{
    /// <summary>
    /// Lógica de interacción para MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        publicMainWindow()
        {
            InitializeComponent();
        }
        privatevoid button1_Click(objectsender, RoutedEventArgs e)
        {
           //llamada al método cargar_barra() para cargar el progressbar
            cargar_barra();
        }
        //se crea un delegado que permita utilizar un método
        //para actualizar el valor del progressbar
        private delegate void DelegadoActualizaProgressBar(System.Windows.DependencyProperty dp, Objectvalor);
        //método para cargar el progressbar
        private voidcargar_barra()
        {
            //Configuración del ProgressBar
            progressBar1.Minimum = 0;//valor mínimo (inicio de la barra de carga)
            progressBar1.Maximum = 100;//valor máximo(hasta donde se carga, como ejemplo 100)
            progressBar1.Value = 0;//valor de inicio
            //almacenamos el valor del progressbar con la siguiente variable
            double valor = 0;
           //creamos una nueva instancia del delegado  del progressbar
           //que apunte al método que actualiza el valor del progressbar
            DelegadoActualizaProgressBar DelegadoActualizaPB = new DelegadoActualizaProgressBar(progressBar1.SetValue);
           
            //ciclo cerrado: se cicla hasta que el progressbar alcanza el valor máximo
            do
            {
                //incrementamos en 1 a valor
                valor += 1;
                /*se actualiza el valor d el progressbar
                 a) se llama al delegado que actualiza el valor del progressbar
                 b) se asina como prioridad del despachador al background
                 c) se pasa la variable valor al array que contiene la propiedad para actualizar el progressbar */
                           
                Dispatcher.Invoke(DelegadoActualizaPB,
                    System.Windows.Threading.DispatcherPriority.Background,
                    newobject[] { ProgressBar.ValueProperty, valor });
            }
            //terminará de ciclar cuando el valor del progressbar
            //sea igual al valor máximo definido previamente
            while (progressBar1.Value != progressBar1.Maximum);
        }
    }
}
Código XAML
<Window x:Class=»progressbarwpf.MainWindow»
        xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»
        xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»
        Title=»MainWindow» Height=»350″ Width=»525″>
    <Grid>
        <ProgressBar Height=»28″ HorizontalAlignment=»Left» Margin=»29,95,0,0″
                     Name=»progressBar1″ VerticalAlignment=»Top» Width=»449″ />
        <Button Content=»Cargar» Height=»23″ HorizontalAlignment=»Left» Margin=»181,185,0,0″
                Name=»button1″ VerticalAlignment=»Top» Width=»118″ Click=»button1_Click» />
    </Grid>
</Window>
Si se desea cargar la barra de manera progresiva el código puede ser el siguiente, en el cual la barra aumenta su valor en 10 cada vez que se presiona el botón “Aumentar progressbar”, al finalizar la carga muestra un mensaje.
Código C#
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Data;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Imaging;
usingSystem.Windows.Navigation;
usingSystem.Windows.Shapes;
namespace progressbarwpf
{
    /// <summary>
    /// Lógica de interacción para MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        publicMainWindow()
        {
            InitializeComponent();
        }
        privatevoid button1_Click(objectsender, RoutedEventArgs e)
        {
            //llamada al método aumenta_progressbar() para
            //aumentar el valor del progressbar
            aumenta_progressbar();
        }
       public  double valor = 0;
        //se crea un delegado que permita utilizar un método
        //para actualizar el valor del progressbar
        private delegate void DelegadoActualizaProgressBar(System.Windows.DependencyProperty dp, Objectvalor);
        //metodo para configurar el progressbar se llama en el evento loaded de la forma
       public voidconfigura_progressbar()
       {
           //Configuración del ProgressBar
           progressBar1.Minimum = 0;//valor mínimo (inicio de la barra de carga)
           progressBar1.Maximum = 100;//valor máximo(hasta donde se carga, como ejemplo 100)
           progressBar1.Value = 0;//valor de inicio
           //almacenamos el valor del progressbar con la siguiente variable
        
          
       }
        //método para aumentar gradualmente el valor del progressbar 
        public voidaumenta_progressbar()
        {
            //creamos una nueva instancia del delegado  del progressbar
            //que apunte al método que actualiza el valor del progressbar
            DelegadoActualizaProgressBar DelegadoActualizaPB = new DelegadoActualizaProgressBar(progressBar1.SetValue);//incrementamos en 1 a valor
            valor += 10;
            /*se actualiza el valor d el progressbar
             a) se llama al delegado que actualiza el valor del progressbar
             b) se asina como prioridad del despachador al background
             c) se pasa la variable valor al array que contiene la propiedad para actualizar el progressbar */
            Dispatcher.Invoke(DelegadoActualizaPB,
                System.Windows.Threading.DispatcherPriority.Background,
                newobject[] { ProgressBar.ValueProperty, valor });
            //si llega al máximo mostramos un mensaje
            if (progressBar1.Value==progressBar1.Maximum)
            {
                MessageBox.Show(«Barra cargada totalente»);
            }
        }
        //evento loaded de la forma
        privatevoid Window_Loaded(objectsender, RoutedEventArgs e)
        {
            //lamada al método configura_progressbar()
            //para configurar el progressbar
            configura_progressbar();
        }
    }
}
Código XAML
<Window x:Class=»progressbarwpf.MainWindow»
        xmlns=»http://schemas.microsoft.com/winfx/2006/xaml/presentation»
        xmlns:x=»http://schemas.microsoft.com/winfx/2006/xaml»
        Title=»MainWindow» Height=»350″ Width=»525″ Loaded=»Window_Loaded»>
    <Grid>
        <ProgressBar Height=»28″ HorizontalAlignment=»Left» Margin=»29,95,0,0″
                     Name=»progressBar1″ VerticalAlignment=»Top» Width=»449″ />
        <Button Content=»Aumentar progressbar»Height=»23″HorizontalAlignment=»Left» Margin=»159,184,0,0″
                Name=»button1″ VerticalAlignment=»Top» Width=»161″ Click=»button1_Click» />
    </Grid>
</Window>