Como utilizar un ProgressBar?

Para dar las gracias debes entrar o registrarte en el foro

Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
09 May 2014, 17:28# 1

Hola, estoy tratando de utilizar un marcador de progreso...el progressBar. He leído en el msdn como se manejan y demás, pero no lo he podido hacer funcionar para que aparezca al momento de hacer click en un boton y se muestre durante un periodo corto de tiempo hasta que se visualiza una imagen y el progressbar desaparezca. Tampoco he encontrado muchos ejemplos de su utilización. Agradecería un poco de ayuda :)

Gracias  
Etiquetado en:
Administrador
Administrador
Mensajes: 826 Agradecido: 119
10 May 2014, 23:16# 2

Mira a ver si este ejemplo te sirve.

Enviado desde mi LG-D802 mediante Tapatalk

Gracias  
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
12 May 2014, 17:14# 3

Gracias davdi, muy útil la web esa :) A ver si me sale

Gracias  
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
12 May 2014, 18:52# 4

Davdi, sigo teniendo el mismo problema. El código esta bien... pero no se porque al llamar el evento que muestra la barra de progreso y luego hacer la función que trabaja con unas imágenes, muestra la barra luego de hacer todo. No va mostrando a medida que se dispara la linea de código o directamente no lo hace. Hay algo que no estoy entendiendo de c# :/

private void MostrarImagen(object sender, RoutedEventArgs e)
{
SystemTray.ProgressIndicator = new ProgressIndicator();
SystemTray.ProgressIndicator.Text = "Procesando...";

barraProceso(true);

transformarImagen(sender, e); //funcion grande que demora unos 60 segundos trabajando con imagenes

barraProceso(false);

PictureBox.Source = bimgPano; // MUESTRO EL RESULTADO DE LA TRANSFORMACION

}

private void barraProceso(bool value)
{
SystemTray.ProgressIndicator.IsIndeterminate = value;
SystemTray.ProgressIndicator.IsVisible = value;

btnSave.Visibility = Visibility.Visible; // Boton para guardar imagen

/*if (progresoBar.Visibility == Visibility.Collapsed)
{

progresoTxt.HorizontalAlignment = HorizontalAlignment.Center;
progresoTxt.Text = "Procesando...";
progresoTxt.Height = 30;

BitmapImage bmp = new BitmapImage();
PictureBox.Source = bmp;

progresoTxt.Visibility = Visibility.Visible;
progresoBar.Visibility = Visibility.Visible;

}*/
}

Gracias  
Administrador
Administrador
Mensajes: 826 Agradecido: 119
13 May 2014, 12:39# 5

El problema es que NO se puede actualizar la interfaz desde el mismo proceso. Necesitas un Hilo.

Lo más sencillo sería cambiar tu manejador MostrarImagen() por algo como:

private void MostrarImagen(object sender, RoutedEventArgs e)
{
SystemTray.ProgressIndicator = new ProgressIndicator();
SystemTray.ProgressIndicator.Text = "Procesando...";

barraProceso(true);

BackgroundWorker bw = new BackgroundWorker();

bw.DoWork += (o, e) => {
transformarImagen(sender, e); //funcion grande que demora unos 60 segundos trabajando con imagenes
};

bw.RunWorkerCompleted += (o, e) => {
barraProceso(false);

PictureBox.Source = bimgPano; // MUESTRO EL RESULTADO DE LA TRANSFORMACION
};

bw.RunWorkerAsync();

}

Gracias  
1 persona ha dado las gracias: candyvf
Moderador
Moderador
Mensajes: 637 Agradecido: 22
14 May 2014, 04:53# 6

El código propuesto por davdi te sirve. Ya que el RunWorkerAsync hace que tu progressbar se adapte a la velocidad de hardware del equipo que esta usando tu App. Espero que te haya servido la solución propuesta

Sent from my RM-821_eu_euro1_276 using Tapatalk

Gracias  
1 persona ha dado las gracias: candyvf
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
16 May 2014, 23:17# 7

uhhh que bueno gracias chicos, justamente estaba buscando algo de eso. Algo mas para aclarar sobre como funciona el RunWorkerAsync?¿ Ahora lo pruebo y les cuento :)

Gracias  
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
16 May 2014, 23:48# 8

lo estuve probando y mirando como es el código... pero yo estoy programando en c# para windows phone 8, el código se utiliza igual? porque veo que la forma del código es distinto a como lo he visto hasta ahora y me da error cuando llamo mi funcion transformar(o,e);

Gracias  
Administrador
Administrador
Mensajes: 826 Agradecido: 119
16 May 2014, 23:54# 9

Da igual. El fallo es mío, no me di cuenta que estás en un manejador.
Cambia:
bw.DoWork += (o, e) y
bw.RunWorkerCompleted += (o, e)
Por:
bw.DoWork += (o, args)
bw.RunWorkerCompleted += (o, args)
Y debería funcionarte

Enviado desde mi LG-D802 mediante Tapatalk

Gracias  
1 persona ha dado las gracias: candyvf
Miembro ocasional
Miembro ocasional
Mensajes: 33 Agradecido: 0
17 May 2014, 01:04# 10

Si, eso me di cuenta cuando te lo escribí recién... ahora me da error en la función transformar(sender,e)). Y no se porque, porque normal anda bien y con ese código en el medio que llama a la función me da una exception en una parte del código del evento.

Gracias  