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

Application.DoEvents()

Estas en el tema de Application.DoEvents() en el foro de .NET en Foros del Web. Hola tengo un Aplicacion Winform en C# .Net 2005 en la cual tengo un ProgressBar esta barra nace oculta y necesito que cuando el usuario ...
  #1 (permalink)  
Antiguo 03/10/2008, 13:32
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Pregunta BackgroundWorker

Hola tengo un Aplicacion Winform en C# .Net 2005 en la cual tengo un ProgressBar esta barra nace oculta y necesito que cuando el usuario le de click al boton de guardar esa barra me aparezca pero no aparece hasta que termina el proceso, utilizo el DoEvents

Código:
                            Application.DoEvents();
                            ProgressBar.Visible = true;
                            Application.DoEvents();
pero no se visualiza, alguna idea o sugerencia?

Gracias.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."

Última edición por mvazquez; 06/10/2008 a las 09:14
  #2 (permalink)  
Antiguo 03/10/2008, 14:27
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
Respuesta: Application.DoEvents()

ok , puedes poner mas codigo ,digo seguramente hay que trabajar con ello. Usar probablemente un delegado para la actualizacion y el buen Invoke.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 03/10/2008, 14:44
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: Application.DoEvents()

Que onda Peter, si me comentaron que con un delegado y estoy trabajando en eso solo que me ya me perdi...

creo el delegado en la parte superior de mi codigo
public delegate void dProgressBar();

Tengo un metodo que se llama
void Barra()
{
prgBarProcesos.Visible = true;
}

Aqui simplemente muestro la barra.......
Pero....... luego como le digo a ese delegado que mande ejecutar el metodo Barra?

Gracias.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #4 (permalink)  
Antiguo 03/10/2008, 14:50
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
Respuesta: Application.DoEvents()

te pongo un sample en 5 min, en lo q prendo la pc
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 03/10/2008, 15:07
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: Application.DoEvents()

Gracias Peter...
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #6 (permalink)  
Antiguo 03/10/2008, 15:12
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
Respuesta: Application.DoEvents()

Hola gente.

Algo que todavia no entiendio bien que es un "Delegate". Más o menos que es un "Delegate" ?
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #7 (permalink)  
Antiguo 03/10/2008, 15:17
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: Application.DoEvents()

Hola Brother, segun lo que he lido y lo que he entendido.....

Se usan para implementar métodos de devolución de llamada, callbacks, que son fundamentales para lograr:programar procesamiento ASINCRONOS o para insertar código de cliente, entre las instancias que produce el servidor, para no usar timers donde no sea necesario.

Los métodos de devolución de llamada se usan en procesamiento asíncrono porque se desconoce el tiempo que va a tardar en ejecutarse el método que se invoca y que potencialmente podría ser largo.

Ya nuestro amigo Peter nos apmpliara la información mas a detalle....

Saludos.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #8 (permalink)  
Antiguo 03/10/2008, 16:40
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
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
  #9 (permalink)  
Antiguo 03/10/2008, 17:04
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
Respuesta: Application.DoEvents()

Gracias Peter............
Tu que recomiendas que sea mejor, usar un delegado o BackGroundWorker ???

y si es el BackGroundWorker como se implementa?
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."
  #10 (permalink)  
Antiguo 03/10/2008, 17:11
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
Respuesta: Application.DoEvents()

con el backgrounworker es facilisimo trabajar porq tienes un evento que maneja la accion que debe realizar si tiene que reportar progreso y que hacer si cancela o realiza la operacion, lo unico que te garantiza el backgroundworker es que si tienes 2 o mas cosas que ejecutar a la par ( y no son codependientes) pues el bw viene como anillo al dedo. pero requieriras obviamente deberas realizar delegados, asi que no se queda atras el tema un delegado que siga el patron requerido por el BW.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5

Última edición por Peterpay; 03/10/2008 a las 17:21
  #11 (permalink)  
Antiguo 03/10/2008, 19:38
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
Respuesta: Application.DoEvents()

como andan amigos.
La verdad es que no se para de aprender, todos los dias hay montones de cosas para aprender. Gracias por la explicacion, la verdad se los agradesco.
Abrazos amigos !!!!!!!!!!!!!!!!!!!
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #12 (permalink)  
Antiguo 06/10/2008, 09:04
Avatar de mvazquez  
Fecha de Ingreso: octubre-2004
Ubicación: Monterrey - México
Mensajes: 875
Antigüedad: 19 años, 6 meses
Puntos: 8
BackgroundWorker

Alguien me postee un ejemplo simple del objeto BackgroundWorker.........
Digamos que, un ejemplo que ponga visible un Label mientras el procesos este ejecutándose y una vez que termine la oculte...

Gracias.
__________________
http://vazquezvega.wordpress.com/
"La paciencia nos da el privilegio de compartir el refrescante fruto de Dios con los demás."

Última edición por mvazquez; 06/10/2008 a las 09:14
  #13 (permalink)  
Antiguo 06/10/2008, 09:41
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
Respuesta: Application.DoEvents()

revisa esto

http://www.codeproject.com/KB/cpp/Ba...r_Threads.aspx

PD: Los delegados siguen ahi aunque sea otra forma de invocacion.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #14 (permalink)  
Antiguo 07/10/2008, 07:19
 
Fecha de Ingreso: agosto-2007
Mensajes: 46
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Application.DoEvents()

Hola como estas???
Mirá, no se nada de C#, pero una vez me paso algo parecido en java. Se llenaba cuando terminaba el proceso (el proceso era parsear unos archivos xml y pasar sus datos a una BD). Ésto lo solucione usando un temporizador juntamente con una función For. El temporizador lo usaba dentro del For por cada paso que daba. El tiempo de refresco del temporizador lo ponia bastante bajo para que no me generara un retardo en el proceso.

Bueno espero que te halla dado alguna idea. Suerte!!!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:49.