Saber si una ventana se ha cargado ¿como?

04/01/2005 - 14:35 por Luis | Informe spam
Hola que tal,

trato de saber lo siguiente, tengo que hacer una carga de datos que lleva un
poco de tiempo, y he creado un winform que pne un mensaje en pantalla, y me
gustaría cargarlo y que se muestre hasta que se acabe el proceso de carga de
datos. Ahora mismo simplemente habro el nuevo winform antes de empezar la
carga, pero no me lo llega a mostrar, entonces la pregunta, hay alguna otra
forma de hacer eso SIN usar Thread?? simplemente necesitaría que se cargue
del todo el winform y que siga con el resto el sistema.

O alguna otra forma de mostrar información de que el proceso se va
realizando... lo que quiero es que el cliente sepa que se está ejecutando
algo.

Un saludo

Preguntas similare

Leer las respuestas

#1 pablo crosio
04/01/2005 - 15:35 | Informe spam
hola!

si no vas a trabajar con threads no deberias cargar el formulario y correr
el proceso en el evento Load si es que ahora lo haces asi. puesto que
hasta que no termine el proceso el formulario no se desplegara

una alternativa a utilizar threads es hacer uso de Application.DoEvents()
cada cierto tiempo dentro del thread que realiza el proceso, por ejemplo:

ciclo del proceso
cada cierto tiempo o % de proceso hacer Application.DoEvents()

procesar

fin ciclo

esto permite a Windows procesar los mensajes pendientes como pulsaciones del
mouse, etc... si no haces esto, el formulario quedaria como "petrificado"
hasta la finalizacion del proceso...

de todas formas te recomiendo que todo lo que debas hacer en segundo plano y
no necesite de interfaz de usuario, lo corras en un thread aparte

salu2!!

pablo


"Luis" escribió:

Hola que tal,

trato de saber lo siguiente, tengo que hacer una carga de datos que lleva un
poco de tiempo, y he creado un winform que pne un mensaje en pantalla, y me
gustaría cargarlo y que se muestre hasta que se acabe el proceso de carga de
datos. Ahora mismo simplemente habro el nuevo winform antes de empezar la
carga, pero no me lo llega a mostrar, entonces la pregunta, hay alguna otra
forma de hacer eso SIN usar Thread?? simplemente necesitaría que se cargue
del todo el winform y que siga con el resto el sistema.

O alguna otra forma de mostrar información de que el proceso se va
realizando... lo que quiero es que el cliente sepa que se está ejecutando
algo.

Un saludo



Respuesta Responder a este mensaje
#2 Rodrigo Corral [MVP]
04/01/2005 - 16:43 | Informe spam
La solución pasa por usar hilos o utilizar delegados para ejecutar metodos
asincronamente, lazando un hilo que se encarge de hacer la tarea pesada en
segundo plano. Basicamente, el problema que existe es que no puedes actuar
sobre un control de interfaz desde un hilo diferente al hilo en el que se
creo el control. Para eso existe el tema del BeginInvoke de los controles
que se encarga de hacer el marshalling necesario para que el hilo
que haga la llamada al componente de interfaz sea el adecuado.

Aqui tienes una recopilación de articulos sobre el tema:

.NET: Practical Multithreading for Client Apps -- MSDN Magazine, January
2004
http://msdn.microsoft.com/msdnmag/issues/04/01/NET

Windows Forms: Give Your .NET-based Application a Fast and Responsive UI
with Multiple Threads -- MSDN Magazine, February 2003
http://msdn.microsoft.com/msdnmag/i...ithreading

.NET Delegates: Making Asynchronous Method Calls in the .NET Environment --
MSDN Magazine, August 2001
http://msdn.microsoft.com/msdnmag/i...1/08/async

Basic Instincts: Asynchronous Method Execution Using Delegates -- MSDN
Magazine, January 2004
http://msdn.microsoft.com/msdnmag/i...cinstincts

Basic Instincts: Updating the UI from a Secondary Thread -- MSDN Magazine,
May 2004
http://msdn.microsoft.com/msdnmag/i...cInstincts
microsoft.public.es.vc++http://rcorral.mvps.org
Respuesta Responder a este mensaje
#3 Luis
05/01/2005 - 00:49 | Informe spam
Muchas gracias al final he optado por implementarlo con hilos... :)

Gracias

"Rodrigo Corral [MVP]" escribió en el mensaje
news:
La solución pasa por usar hilos o utilizar delegados para ejecutar metodos
asincronamente, lazando un hilo que se encarge de hacer la tarea pesada en
segundo plano. Basicamente, el problema que existe es que no puedes actuar
sobre un control de interfaz desde un hilo diferente al hilo en el que se
creo el control. Para eso existe el tema del BeginInvoke de los controles
que se encarga de hacer el marshalling necesario para que el hilo
que haga la llamada al componente de interfaz sea el adecuado.

Aqui tienes una recopilación de articulos sobre el tema:

.NET: Practical Multithreading for Client Apps -- MSDN Magazine, January
2004
http://msdn.microsoft.com/msdnmag/issues/04/01/NET

Windows Forms: Give Your .NET-based Application a Fast and Responsive UI
with Multiple Threads -- MSDN Magazine, February 2003
http://msdn.microsoft.com/msdnmag/i...ithreading

.NET Delegates: Making Asynchronous Method Calls in the .NET
Environment --
MSDN Magazine, August 2001
http://msdn.microsoft.com/msdnmag/i...1/08/async

Basic Instincts: Asynchronous Method Execution Using Delegates -- MSDN
Magazine, January 2004
http://msdn.microsoft.com/msdnmag/i...cinstincts

Basic Instincts: Updating the UI from a Secondary Thread -- MSDN Magazine,
May 2004
http://msdn.microsoft.com/msdnmag/i...cInstincts
microsoft.public.es.vc++http://rcorral.mvps.org

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida