PDA

Ver la Versión Completa : Actualizar form al volver a el mientras se realiza proceso largo(p.e: recorrer db)


Wonni
18-06-2007, 15:27:29
hola;

A ver si se explicarme ;) :

Tengo un form en el cual por ejemplo mando hacer una ciera operacion a una BD. Esta tarda mucho y me voy a otra cosa. Al volver a mi aplicacion, pues no se muestra hasta terminar. Osea no se refresca la ventana.

Imaginemos que recorremos una tabla con miles de registros y con enablecontros. Vemos en el DBGrid como los recorre. Nos vamos a otra parte y entonces volvemos. Pues ya no se ve al rejilla y como se va recorriendo, bueno, esque no se ve nada, esta en blanco la zona del form.

¿Como se puede solucionar este problema?

Es mas, otra cosa. Si el DBGrid está en una pagina de un PageControl, ¿como puedo irme a otra pagina mientras se hace el recorrido por la tabla?

marcoszorrilla
18-06-2007, 15:29:39
Pues me parece que la cosa no es tan fácil como parece, o mucho me equivoco o no vas a tener más remedio que hacer uso del Multihilo.(Threads).

Un Saludo.

Wonni
18-06-2007, 15:34:18
Pues ya me temia yo que iria por ahi la cosa. Pero pense que tal vez la solucion seria otra.

Pues nada, habrá que tratar el tema, pues es algo que todavia no he hecho el trabajar con varios Threads.

Gracias :)

lgarcia
18-06-2007, 17:25:21
Hola:

Me parece que dandole otro enfoque podrias no utilizar el DBGrid, porque al usuario no debe interesarle eso, sino que se ejecute la operacion y de esta forma puedes coger el control hacia otro formulario y cuando se termine la operacion regresas al formulario con su correspondiente mensaje de que se realizo exitosamente la operacion. Piensa en esta opcion a ver.

Saludos
Luis Garcia

Todos los caminos conducen a Roma

Wonni
18-06-2007, 17:35:43
Gracias lgarcia;

El caso, es que no se trata particularmente de un DBGrid. Ha sio por poner un ejemplo, eso si real, pues me ocurre. Ahora ya desactivo los controles, antes no. Ademas de que queda mas elegante, va pero bastante mas rapido ;)

Pero el asunto es que, aunque no muestre el DBGrid, mientras se realiza esa operacion ocurre lo mismo al salir de mi aplicacion y volver. Que no se ve nada, se queda como colgado hasta terminar. En realidad no esta colgado, aunque si al usuario le da por insistir mucho pues entonces si cuelga la aplicacion.

Parece ser que la solución es lo dicho por marcoszorrilla. A no ser que exista otra, que es lo que yo me preguntaba.

ixMike
18-06-2007, 19:44:00
Hey, Wonni!

¿Has probado con Application.ProcessMessages?

Llama a ese procedimiento cada vez que se repita el bucle que recorre la tabla. Lo que hace es que realiza todos los procedimientos que están a la espara (refrescar imágenes, refrescar canvas, clicks, etc...).

Pero tienes que llevar cuidado, porque si ahora al darle a la "x" para cerrar la ventana no pasa nada (hasta que acabe el trabajo, y la ventana se cerraría), ahora, al llamar a ProcessMessages se procesaría el click que está en espera y el programa se cerraría. Y no sólo con la "x", sino con los clicks a los botones o las combinaciones de teclas de menús. Lo ideal sería que lo desabilitaras todo (todo lo necesario) para que esos problemas no sucedan, y para combinaciones de teclas, pues una variabla booleana ("trabajando", por ejemplo) para comprobar si el proceso está en marcha o no sería una buena idea.

Saludos a todos. ;)