Código:
pero no se visualiza, alguna idea o sugerencia?Application.DoEvents(); ProgressBar.Visible = true; Application.DoEvents();
Gracias.
| ||||
![]() 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:
pero no se visualiza, alguna idea o sugerencia?Application.DoEvents(); ProgressBar.Visible = true; Application.DoEvents(); 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 |
| ||||
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." |
| ||||
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." |
| |||
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!!!! |
| ||||
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." |
| ||||
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:
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.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); } }
Código:
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. 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); } } Última edición por Peterpay; 03/10/2008 a las 17:11 |
| ||||
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." |
| ||||
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. Última edición por Peterpay; 03/10/2008 a las 17:21 |
| |||
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!!!! |
| ||||
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 |
| ||||
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. |
| |||
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!!! |