Ver Mensaje Individual
  #8 (permalink)  
Antiguo 03/10/2008, 16:40
Avatar de Peterpay
Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 17 años, 5 meses
Puntos: 87
Respuesta: Application.DoEvents()

Perdonen por la tardanza pero aqui esta ( es que se me interpuso una torta jajaja)

Un delegado no es mas (si vienes de un enfoque de c++) un puntero a una función solo eso , pero mas seguro porq todo lo administra .net y es orientado a objetos (nada de que hay perdi el puntero), aunque es solo un tipo por referencia que te permitira invocar uno o mas metodos en tiempo de ejecucion. el tema es extenso no por nada hay al menos 1 capitulo por libro de .net

------

En lo que respecta a lo que necesita el buen mvazquez no es mas que usar el Metodo Invoke

prueba haciendo esto seguramente

Código:
public void MostrarProgressBar(object algo)
        {
            this.progressBar1.Visible = true;
        }

        public void ActualizarProgressBar(object algo)
        {
            progressBar1.Value = Convert.ToInt32(algo);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MostrarProgressBar(null);
             for (int i = 0; i < 100; i+=10)
            {
                System.Threading.Thread.Sleep(1000);
                ActualizarProgressBar(i);
            }
        }
en el codigo anterior hara todo lo que necesite hacer con forme entre a su cola de instrucciones pendientes ahora con algunos cambios mira la diferencia aqui tenemos que usar un delegado para que a la par que nosotros estamos procesando algo requerimos que ese algo haga una actualizacion del UI.

Código:
public delegate void ActualizaGUI(object argumentos);

        public void MostrarProgressBar(object algo)
        {
            this.progressBar1.Visible = true;
        }

        public void ActualizarProgressBar(object algo)
        {
            progressBar1.Value = Convert.ToInt32(algo);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Invoke(new ActualizaGUI(MostrarProgressBar), new object[] { 0 });
            for (int i = 0; i < 100; i+=10)
            {
                
                //Supongamos que este proceso tarda demasiado
                this.Invoke(new ActualizaGUI(ActualizarProgressBar),new object[]{i});
                System.Threading.Thread.Sleep(1000);
            }
        }
ojo esto dejara colgada la aplicacion si el proceso es lento pero mostrara el progreso, para evitar eso pueden usar un background worker o un hilo y usar BeginInvoke en vez de Invoke lo cual lo hara de forma asincrona y pueden realizar otra operaicon al mismo tiempo.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Última edición por Peterpay; 03/10/2008 a las 17:11