Programadores dedicados a C sharp .Net, eres nuevo, experto o quieres aprender a programar en C Sharp, aquí encontraras todo lo que necesitas.
 
ÍndiceCalendarioFAQBuscarMiembrosGrupos de UsuariosChatRegistrarseConectarse
Conectarse
Nombre de Usuario:
Contraseña:
Entrar automáticamente en cada visita: 
:: Recuperar mi contraseña
Últimos temas
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Síguenos:
Crear foro Crear foro Crear foro

Comparte | 
 

 Bloqueo de Interfaz Grafica

Ver el tema anterior Ver el tema siguiente Ir abajo 
AutorMensaje
pepebr27
Novato


Mensajes : 2
Puntos : 4

MensajeTema: Bloqueo de Interfaz Grafica   Sáb Abr 09, 2011 1:06 pm

Que tal hoy acabo de descubrir su foro y despues de darle una vista a los post no vi algo que me ayudara con una situacion que tengo y si las expondre aver si es posible su solucion.
Estoy haciendo un programa que en la base de datos (MySql) tiene la informacion de contratos, clientes etc etc y tengo una funcion que se llama "ObtenerInfoContratos(int numero de contrato)" esta funcion es algo asi como enorme porque dentro de ella se llama a la base de datos y obtiene cierta informacion y llama a otras funciones que a su ves llaman a la base, en pocas palabras es algo asi como la funcion principal para recopilar todo lo que nesesito saber de un contrato que tiene muchos apartados, el punto es que es una funcion grande que tarda en ejecutarse y que a su ves llama a otra funciones que son algo tardadas, tardado para mi son como 2-3 segundos aprox, ahora esta es la situacion cuando entra a esa funcion se bloquea la interfaz grafica y solo hasta que termina me muentra toda la informacion, pero como aveces la conexion a internet es lenta esa consulta podria llegar a tardar mas y yo quiero mostrar una barra de progreso mientras se esta ejecutando esa funcion, hice una forma que solo tuviera la barra y se moviera continuamente, la mando a llamar antes de la funcion grande y la termino despues pero si lo hago con .ShowDialog() obviamente no hara nada hasta que cierre la forma, y si lo hago con .Show() se muestra el dialogo pero no se ven nisiquiera los controles de hecho donde esta el label y el progressbar se ve tranparente, investigue y es porque al entrar a la funcion grande el programa no respondera al repintado hasta que salga de ella, intente hacerlo con backgroundWorker con un progress bar en la forma proncipal pero es lo mismo, si me muestra la barra moviendose pero al momento de entrar a la funcion se detiene y al terminar sigue avanzandos, tambien lo intente con DoEvents() pero no pasa nada, el problema radica en el GUI porque la forma principal tiene el control de la intefaz grafica y al estar dentro la funcion grande como que se bloquea y yo estaba pensando si hay alguna forma de pasarle el control de la interfaz grafiaca a una forma modal para ver la barrita moviendose y ya cuando termine regresarle el control a la forma principal, o si alguien tiene alguna idea de como moviendose mientras se ejecuta la funcion grande sera bien aceptada cabe mencionar que con el backgroundWorker si me incrementa el valor del progress bar pero lo repinta solo cuando se termina la funcion grande.
Bueno eso fue mucha escritrura si alguien en sus ratos de ocio lo lee y tiene una idea pues se les agradece su tiempo, hasta luego.
Volver arriba Ir abajo
Ver perfil de usuario
Luis Garcia
STAFF TEAM
STAFF TEAM


Mensajes : 61
Puntos : 109

MensajeTema: Re: Bloqueo de Interfaz Grafica   Sáb Abr 09, 2011 1:36 pm

Creo que tu problema se solucionaría utilizando "threads" o hilos de proceso. Creo que lo que te sucede es que mientras esta ocurriendo el proceso de obtención de datos la interfaz gráfica se traba y eso es porque le interfaz es un proceso y si todo lo manejas en un solo hilo de proceso puede que se espere el repintado de la interfaz debido a que esta procesando la función que mandas a llamar.

Otra solución sería optimizar tu código verifica si tu código es lo mejor, tal vez tengas un problema de lógica, es decir si vas a recibir 1000 contratos realmente no cargues todos los contratos porque nadie se pone a ver 1000 contratos, mejor carga contratos de 10 en 10 paginando o separando (tal vez un filtro de datos), una búsqueda por contrato especifico sería más eficiente.
Volver arriba Ir abajo
Ver perfil de usuario
pepebr27
Novato


Mensajes : 2
Puntos : 4

MensajeTema: Re: Bloqueo de Interfaz Grafica   Dom Abr 10, 2011 2:16 am

Luis Garcia escribió:
Creo que tu problema se solucionaría utilizando "threads" o hilos de proceso. Creo que lo que te sucede es que mientras esta ocurriendo el proceso de obtención de datos la interfaz gráfica se traba y eso es porque le interfaz es un proceso y si todo lo manejas en un solo hilo de proceso puede que se espere el repintado de la interfaz debido a que esta procesando la función que mandas a llamar.

Hola Luis, gracias por comentar, pues si eh estado pensando la idea de utilizar hilos y se que eso soluciona los problemas de la interfaz grafica, tambien optimize el codigo y el retardo es menor a 2 segundos es lo mejor que pude hacer con la optimizacion, la verdad no eh utilizado los hilos en c# y no se como implementarlos si lei que esa podria ser una solucion y trate de implementarlo pero falle, porque por ejemplo creo un hilo que llevara la funcion "grande" pero esa funcion tiene dentro otras funciones(y la funcion grande y subfunciones utilizan los controles de la forma) y no puedo captar bien lo que en verdad es el hilo, tambien intente usar un delegado cargando la funcion grande pero es el mismo problema el delegado no me permite paso de parametros...

Eh visto ejemplos de hilos y los puesto en practica pero son ejemplos muy sencillos donde un hilo no hace mas que operaciones aritmeticas o algo muy sencillo y eso lo comprendo, pero lo que me tiene bloqueado mentalmente es que si creo un thread con mi funcion de obtencion de datos, que pasa cuando este thread tenga que llamar a otras funciones o interactuar los controles de la forma...

Tambien eh pensado que lo estoy haciendo alreves, que deberia haber utilizado un BackGroundWorker para las tareas pesadas pero pues no tenia en mente este problema de querer poner una barrita de progreso mientras la interfaz estaba bloqueada, en fin yo creo que desistire mi idea de una barra de progreso por ahora, ya que por motivos de tiempo no puedo ponerme a cambiar muchas cosas :s y si tendre que darme un tiempo de leer mas sobre los hilos para evitarme problemas mas adelante Suspect
Volver arriba Ir abajo
Ver perfil de usuario
Contenido patrocinado




MensajeTema: Re: Bloqueo de Interfaz Grafica   Hoy a las 11:45 pm

Volver arriba Ir abajo
 
Bloqueo de Interfaz Grafica
Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 1 de 1.
 Temas similares
-
» NO PUEDO INGRESAR A LA INTERFAZ GRÁFICA DEL DISPOSITIVO, PANTALLA DE BLOQUEO CONGELADA.
» ¿Cambiar el color de la grafica de Mejores Posteadores?
» Como bloqueo temporalemnte el acceso de ciertos usuarios al foro
» estilo de foro igual al del interfaz del administrador
» como puedo acceder a mi panel de administracion con bloqueo

Permisos de este foro:No puedes responder a temas en este foro.
CSPromex :: PROGRAMACIÓN EN C# :: Foro de ayuda-
Cambiar a: