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>