none
Barra de progreso para mostrar mientras se carga un formulario hijo RRS feed

  • Pregunta

  • hola buenas tardes!!

    Mi consulta es la siguiente:
    Tengo un formulario padre en el cual se van cargando los formularios hijos. El problema es que alguno de los formulario tarda en cargarse y para que no se quede medio colgado hasta que termine de cargar quería poner una barra de progreso para que por lo menos el usuario final vea que no se ha quedado colgada la aplicación.
    He intentado hacerlo con hilos, pero aún así no consigo que me muestre la barra de progreso completa...

    De momento estoy probando con esto pero me parece un poco ñapa:

     private void bCargarFormulario_Click(object sender, EventArgs e)
            {
               
                this.MiBarraDeCarga.Focus();
                this.pPanelCargando.Visible = true;
                for (int i = 1; i < 1000; i++)
                {
                    this.MiBarraDeCarga.Value=i;
                    
                }
                //mihilo = new Thread(Cargando_Formulario);
                //mihilo.Start();
                int idPuesto = SI2.Program.iIDPuesto;
                if (idPuesto >= 1 && idPuesto <= 6)
                {
                    this.FEdicion = new FEdicion();
                    this.FEdicion.MdiParent = this;
                    this.FEdicion.WindowState = FormWindowState.Maximized;
                    this.FEdicion.Show();
                }
    this.pPanelCargando.Visible=false;
    //mihilo.Abort();
    }
    
    ¿Alguna idea de como hacerlo para que la barra de muestre cargando?

    viernes, 5 de marzo de 2010 12:14

Respuestas

  • Buenas Akala_es

    piensa que si pones un for la ejecución no continua hasta que salgas de ese for... por lo que hasta que no se acabe la barra de progreso no continua... prueba de esta forma:

    Puedes probar a usar un BackgroundWorker para cargar el formulario:
    private BackgroundWorker MiSegundoHilo = new BackgroundWorker();
    En bCargarFormulario_Click quedaría asi:
            private void bCargarFormulario_Click(object sender, EventArgs e)
            {
               
                this.MiBarraDeCarga.Focus();
                this.MiBarraDeCarga.Style = ProgressBarStyle.Marquee
                this.pPanelCargando.Visible = true;
                int idPuesto = SI2.Program.iIDPuesto;
                //Esto lo hacemos para que nos envie el evento a nuestro hilo de progreso!
                MiSegundoHilo.WorkerReportsProgress = true;
                //Ejecutamos el hilo que abrirá nuestra ventana pasando idpuesto como parámetro
                MiSegundoHilo.RunWorkerAsync(idPuesto);
        }
    El evento que maneja el evento DoWork:
            private void MiSegundoHilo_DoWork(object sender, DoWorkEventArgs e)
            {
                //De e.Argument recuperamos nuestro parámetro.
                int idPuesto = (int)e.Argument;
                if (idPuesto >= 1 && idPuesto <= 6)
                {
                    this.FEdicion = new FEdicion();
                    this.FEdicion.MdiParent = this;
                    this.FEdicion.WindowState = FormWindowState.Maximized;
                    this.FEdicion.Show();
                }
            }
    El evento que maneja el workercompleted
            private void MiSegundoHilo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                //Terminamos de cargar, desactivamos la barra!
                MiBarraDeCarga.Dispose();
            }
    Bueno, mi fuerte es visual basic, perdon si hay algun error en el código, pero básicamente así podría funcionar!! un saludo.
    viernes, 5 de marzo de 2010 13:08
    Moderador

Todas las respuestas

  • Buenas Akala_es

    piensa que si pones un for la ejecución no continua hasta que salgas de ese for... por lo que hasta que no se acabe la barra de progreso no continua... prueba de esta forma:

    Puedes probar a usar un BackgroundWorker para cargar el formulario:
    private BackgroundWorker MiSegundoHilo = new BackgroundWorker();
    En bCargarFormulario_Click quedaría asi:
            private void bCargarFormulario_Click(object sender, EventArgs e)
            {
               
                this.MiBarraDeCarga.Focus();
                this.MiBarraDeCarga.Style = ProgressBarStyle.Marquee
                this.pPanelCargando.Visible = true;
                int idPuesto = SI2.Program.iIDPuesto;
                //Esto lo hacemos para que nos envie el evento a nuestro hilo de progreso!
                MiSegundoHilo.WorkerReportsProgress = true;
                //Ejecutamos el hilo que abrirá nuestra ventana pasando idpuesto como parámetro
                MiSegundoHilo.RunWorkerAsync(idPuesto);
        }
    El evento que maneja el evento DoWork:
            private void MiSegundoHilo_DoWork(object sender, DoWorkEventArgs e)
            {
                //De e.Argument recuperamos nuestro parámetro.
                int idPuesto = (int)e.Argument;
                if (idPuesto >= 1 && idPuesto <= 6)
                {
                    this.FEdicion = new FEdicion();
                    this.FEdicion.MdiParent = this;
                    this.FEdicion.WindowState = FormWindowState.Maximized;
                    this.FEdicion.Show();
                }
            }
    El evento que maneja el workercompleted
            private void MiSegundoHilo_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                //Terminamos de cargar, desactivamos la barra!
                MiBarraDeCarga.Dispose();
            }
    Bueno, mi fuerte es visual basic, perdon si hay algun error en el código, pero básicamente así podría funcionar!! un saludo.
    viernes, 5 de marzo de 2010 13:08
    Moderador
  • Muchas gracias!!! lo probaré de esta manera!!
    un saludo y mil gracias!!!
    viernes, 5 de marzo de 2010 14:00
  • De nada!

    Si la respuesta te ha sido Util, márcala, gracias!
    viernes, 5 de marzo de 2010 14:05
    Moderador
  • Buena noche Josue.

    Mi consulta o duda es el mismo escenario, pero para vb.net.

    Tengo un formulario padre y al momento de llamar algunos formularios hijo, estos tardan un poco.

    De qué manera puedo hacer para que me muestre un ToolStripPorgressBarr en el formulario padre mientras carga la información del formulario hijo para luego abrir el formulario hijo...

    De ante mano muchas gracias por su ayuda.

    sábado, 21 de noviembre de 2015 8:20