none
ProgressBar en tiempo real RRS feed

  • Pregunta

  • Buenas tardes,

    Estoy haciendo un formulario en el cual se cargan unos datos a un datagridview, los datos se cargan mediante una consulta a una base de datos, hay alguna forma de que el progressbar se llene en tiempo real, es decir que cargue en el lapso de tiempo que se realiza la consulta?


    carlos márquez

    viernes, 25 de enero de 2013 19:18

Respuestas

  • Hola.

    Una solución sencilla es la de NO mostrar un progreso real, es decir no mostrar como tal el avance en % p. ej. y mostrar el progressbar con estilo Marquee, y haciendo uso de las Task puedes ejecutar esta acción y no afectar tu UI con bloqueos y demás, luego simplemente ocultas la progress. A manera de ejemplo:

            private void Button1Click(object sender, EventArgs e)
            {
                progressBar1.Visible = true;
                progressBar1.Style = ProgressBarStyle.Marquee;
                var tarea = CargarDatosBd();
                tarea.ContinueWith((x) =>
                                       {
                                           if (InvokeRequired)
                                           {
                                               Invoke((MethodInvoker)(() =>
                                                                           {
                                                                               label1.Text = x.Result;
                                                                               progressBar1.Visible = false;
                                                                           }));
                                           }
                                       });
    
            }
    
            private Task<string> CargarDatosBd()
            {
                //Consulta super pesada
                return Task.Factory.StartNew(() =>
                                                 {
                                                     Thread.Sleep(10000);
                                                     return "Hola Mundo";
                                                 });
            }
        }

    Si necesitas si o si mostrar progrso, Luis Franco escribio esto una vez en su blog, no se si te pueda ser de utilidad.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG | @nicolocodev
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    sábado, 26 de enero de 2013 1:23

Todas las respuestas

  • mm hasta donde se no, salvo que previamente puedas conocer la cantidad de rows que se deben generar y vayas iterando por cada una cargandolo al grid

    si solo haces un SELECT y asignas el datsource no podras saber en timepo real cuanto le cuesta esta tarea porque no informa avance, cuando termina devuelve el control, eso impode saber cuanto se demora

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 25 de enero de 2013 19:32
  • Hola.

    Una solución sencilla es la de NO mostrar un progreso real, es decir no mostrar como tal el avance en % p. ej. y mostrar el progressbar con estilo Marquee, y haciendo uso de las Task puedes ejecutar esta acción y no afectar tu UI con bloqueos y demás, luego simplemente ocultas la progress. A manera de ejemplo:

            private void Button1Click(object sender, EventArgs e)
            {
                progressBar1.Visible = true;
                progressBar1.Style = ProgressBarStyle.Marquee;
                var tarea = CargarDatosBd();
                tarea.ContinueWith((x) =>
                                       {
                                           if (InvokeRequired)
                                           {
                                               Invoke((MethodInvoker)(() =>
                                                                           {
                                                                               label1.Text = x.Result;
                                                                               progressBar1.Visible = false;
                                                                           }));
                                           }
                                       });
    
            }
    
            private Task<string> CargarDatosBd()
            {
                //Consulta super pesada
                return Task.Factory.StartNew(() =>
                                                 {
                                                     Thread.Sleep(10000);
                                                     return "Hola Mundo";
                                                 });
            }
        }

    Si necesitas si o si mostrar progrso, Luis Franco escribio esto una vez en su blog, no se si te pueda ser de utilidad.

    Saludos.


    Nicolás Herrera
    Bogotá - Colombia
    BLOG | @nicolocodev
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    sábado, 26 de enero de 2013 1:23