Threads

17/05/2007 - 19:42 por Robert Barreiro | Informe spam
Mi problema es el siguiente:

Tengo un formulario principal que llama a otro, supongamos form1, el cual
carga unos datos mediante un Stored Procedure. Dicho SP es un poco pesado y
demora unos 5 o 6 segundos en mostrar el formulario con todos los datos. Asi
que decidi crear otra ventanita donde aparece un cartel diciendo "Por favor,
espere..." junto con un GIF animado.

Entonces decidi que debo crear un nuevo Thread en donde corra la nueva
ventanita mientras en el hilo principal se cargan los datos del SP y luego
mato al nuevo hilo creado mediante un hilo.Abort(). Ahora el tema es que la
nueva ventana aparece solo un momento, sin llegar a dibujarse correctamente
y luego de 5 o 6 segundos aparece el formulario con los datos.

En que estoy fallando? Cual seria la forma correcta de encarar este
problema?


Muchas gracias!
 

Leer las respuestas

#1 Alberto Poblacion
17/05/2007 - 20:00 | Informe spam
"Robert Barreiro" wrote in message
news:
Tengo un formulario principal que llama a otro, supongamos form1, el cual
carga unos datos mediante un Stored Procedure. Dicho SP es un poco pesado
y demora unos 5 o 6 segundos en mostrar el formulario con todos los datos.
Asi que decidi crear otra ventanita donde aparece un cartel diciendo "Por
favor, espere..." junto con un GIF animado.

Entonces decidi que debo crear un nuevo Thread en donde corra la nueva
ventanita mientras en el hilo principal se cargan los datos del SP y luego
mato al nuevo hilo creado mediante un hilo.Abort(). Ahora el tema es que
la nueva ventana aparece solo un momento, sin llegar a dibujarse
correctamente y luego de 5 o 6 segundos aparece el formulario con los
datos.

En que estoy fallando? Cual seria la forma correcta de encarar este
problema?



Recuerda que la interface de pantalla es monohilo y que solo se pueden
pintar cosas en pantalla desde el hilo inicial de la misma, de lo contrario
se corrompe o se producen comportamientos extraños (o se genera una
excepción). Si tratas de mostrar algo en un formulario desde otro hilo,
tienes que transportar la ejecución entre hilos mediante el método Invoke de
un Control... y sólo funcionará si el hilo al que transportas la ejecución
no está "pillado" haciendo otra cosa. Así que en tu caso concreto deberías
invertir los papeles, y realizar el acceso a base de datos desde un hilo
separado, mientras que muestras el formulario de espera desde el hilo
principal. Si estás usando el Framework v2.0, el SqlCommand tiene varios
métdos BeginExecuteXxx que automatizan la operación de ejecutarlo en otro
hilo, sin que tengas que preocuparte de manejar el Thread por tu cuenta.

Preguntas similares