Código
C#
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Data;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Imaging;
using
System.Windows.Navigation;
using
System.Windows.Shapes;
namespace progressbarwpf
{
/// <summary>
/// Lógica de interacción
para MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
}
private
void button1_Click(object
sender, 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, Object
valor);
//método para cargar el progressbar
private void
cargar_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,
new
object[] { 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#
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Windows;
using
System.Windows.Controls;
using
System.Windows.Data;
using
System.Windows.Documents;
using
System.Windows.Input;
using
System.Windows.Media;
using
System.Windows.Media.Imaging;
using
System.Windows.Navigation;
using
System.Windows.Shapes;
namespace progressbarwpf
{
/// <summary>
/// Lógica de interacción
para MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public
MainWindow()
{
InitializeComponent();
}
private
void button1_Click(object
sender, 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, Object
valor);
//metodo para configurar el progressbar se
llama en el evento loaded de la forma
public void
configura_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 void
aumenta_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,
new
object[] { 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
private
void Window_Loaded(object
sender, 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>