Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/12/2007, 23:53
Avatar de Peterpay
Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 4 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