Estás en: Como utilizar un ProgressBar?
Para dar las gracias debes entrar o registrarte en el foro
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
Mira a ver si este ejemplo te sirve.
Enviado desde mi LG-D802 mediante Tapatalk
Gracias davdi, muy útil la web esa A ver si me sale
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;
}*/
}
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();
}
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
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
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);
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
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.