Foros del Web » Programación para mayores de 30 ;) » .NET »

progressbar mientras muestro información

Estas en el tema de progressbar mientras muestro información en el foro de .NET en Foros del Web. Hola a tod@s. Me he encontrado con el siguiente problema utilizando la progressbar de visualstudio. Tengo una consulta sql que recorro mediante un while. Lo ...
  #1 (permalink)  
Antiguo 27/12/2007, 03:24
 
Fecha de Ingreso: octubre-2003
Mensajes: 15
Antigüedad: 20 años, 7 meses
Puntos: 0
progressbar mientras muestro información

Hola a tod@s.

Me he encontrado con el siguiente problema utilizando la progressbar de visualstudio.

Tengo una consulta sql que recorro mediante un while. Lo que quiero es que mientras realizo esta consulta utilizar la progressbar y además indicar mediante un label a que registro estoy accediendo en cada momento.

El problema es que la progressbar bloquea todo y no muestra los cambios del label hasta que no ha terminado con lo que solamente sale en el label el último registro.

Muchas gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 30/12/2007, 21:17
 
Fecha de Ingreso: diciembre-2007
Mensajes: 5
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: progressbar mientras muestro información

Supongo que solventarías el problema iniciando el proceso de la progressbar como una hebra o hilo de la ejecución. Es decir, con la clase thread "ejecutas" el método como un hilo o tarea del sistema permitiendo que la "ejecución" principal siga activa.

Espero haberme expresado con claridad y que sea lo que buscabas.
  #3 (permalink)  
Antiguo 30/12/2007, 23:53
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Re: progressbar mientras muestro información

Si estas ocupando una aplicacion windows lo q puedes hacer es esto.

1.- Agrega un BackGroundWorker desde tu toolbox de componentes o hazlo manualmente en codigo.

2.- Configura los eventos que son necesarios y las propiedades requeridas

// Eventos que disparan la actualizacion haciendo la comunicacion inter hilos.
public delegate void ReportaAvance (int avance);
public event ReportaAvance mireportador;

private void Form1_Load(object sender, EventArgs e)
{
// Evento q Se ejecutara como proceso simultaneo, tu consulta
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
// El BW puede reportar su avance por lo q debemos asignarle un evento
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_Prog ressChanged);

this.mireportador += new ReportaAvance(Form1_mireportador);
backgroundWorker1.WorkerReportsProgress = true;
}

// Aqui actualizo el progressbar
void Form1_mireportador(int avance)
{
progressBar1.Value = avance;
}


// Cuando se reporte el avance del BW , este debe invocar el metodo del thread principal que hace la actualizacion del progressbar
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
BeginInvoke(mireportador, e.ProgressPercentage);
}

// Aqui puedes poner tu query.

void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 100; i++)
{

System.Threading.Thread.Sleep(i * 1000);
backgroundWorker1.ReportProgress(i);
}
}

// Este evento dispara la ejecucion de la tarea especificada en el metodo DoWork.
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}

Espero que esto te pueda servir

Saludos
Peterpay
  #4 (permalink)  
Antiguo 31/12/2007, 18:02
 
Fecha de Ingreso: diciembre-2007
Mensajes: 1
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: progressbar mientras muestro información

Lo que puedes hacer es un update del label por cada vez que quieras que se actualice..
ejm:

label1.update()

espero te sirva
  #5 (permalink)  
Antiguo 25/01/2008, 06:24
 
Fecha de Ingreso: octubre-2003
Mensajes: 15
Antigüedad: 20 años, 7 meses
Puntos: 0
De acuerdo Re: progressbar mientras muestro información

Hola a todos

Perdón por el retraso pero he ido liado y no he podido retomar este tema hasta hoy.

Al final ha bastado con el update que comentaba guruNET2005. En vez de hacerlo en el label lo he hecho en un panel que engloba todo.

Lo de los hilos es muy interesante pero todavía no me considero lo bastante experimentado en .NET para adentrarme en este punto.

Muchas gracias a todos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:27.