Dispose o Close

08/04/2007 - 06:23 por principiante | Informe spam
Que es mas adecuado para cerrar un form: Dispose o Close ?

Jose TH

Preguntas similare

Leer las respuestas

#1 Diego Jancic
08/04/2007 - 06:49 | Informe spam
Hola,
El Close sirve para eso, el Dispose esta pensado para liberar la
memoria no manejada de un objeto y si se cierra el form es "pura
casualidad" -- Entiendase que se cierra porque usa recursos no
manejados y al liberarlos se cierra.
Lo adecuado es usar el close, que para eso esta.

Saludos!,
Diego
Respuesta Responder a este mensaje
#2 principiante
08/04/2007 - 06:55 | Informe spam
El Close sirve para eso, el Dispose esta pensado para liberar la
memoria no manejada de un objeto y si se cierra el form es "pura
casualidad"



La pregunta era porque en las pruebas que he hecho ambos me cerraban el form
siempre de forma deterministica no por casualidad como tu dices para el caso
del Dispose.

De todos modos, entendi que debo usar Close.

Gracias y saludos.

Jose TH
Respuesta Responder a este mensaje
#3 Diego Jancic
08/04/2007 - 07:30 | Informe spam
Hola,
No me referia a que funcionaba de casualidad por ser magia o algo asi
=P
Me referia a que el Dispose cierra el form debido a que usa recursos
no manejados, pero nada dice que en versiones futuras el dispose no
haga que lo cierre. Dicho de otra forma, documentacion dice algo asi:
- Close: Cierrra el Form
- Dispose: Elimina recursos no manejados

Y debido a que el form usa rec no manejados el form se cierra, pero es
una implicancia interna que actualmente ocurre.
De hecho si ves el codigo del close usando reflector, vas a ver que
hace algo asi:

if (se esta creando el handler del formulario)
{
throw new exception...
}

if (el handler esta creado)
{
Decirle al SO que cierre el formulario, utilizando
SendMessage de la DLL user32.dll
}
else
{
Dispose();
}

Como veras la implementacion del Close es un poco mas adecuada que
simplemente la del Dispose, ya que si el Close lo necesita lo
llamara...

Espero que ahora se haya entendido un poco mejor..

Saludos!,
Diego
Respuesta Responder a este mensaje
#4 RFOG
08/04/2007 - 10:49 | Informe spam
Se supone que el XAML ya no usa para nada internamente el Win32 y que todo
lo hace según sus cosas, o eso leí hace mucho tiempo en el blog de Nish o
de Texeira, no recuerdo. Así que al menos teóricamente eso que comentas no
esté tan lejos (otra cosa es cómo crean/usan ventanas sin el sistema de
ventanas, pero esa es otra guerra).

En Sun, 08 Apr 2007 07:30:58 +0200, Diego Jancic
escribió:

Hola,
No me referia a que funcionaba de casualidad por ser magia o algo asi
=P
Me referia a que el Dispose cierra el form debido a que usa recursos
no manejados, pero nada dice que en versiones futuras el dispose no
haga que lo cierre. Dicho de otra forma, documentacion dice algo asi:
- Close: Cierrra el Form
- Dispose: Elimina recursos no manejados

Y debido a que el form usa rec no manejados el form se cierra, pero es
una implicancia interna que actualmente ocurre.
De hecho si ves el codigo del close usando reflector, vas a ver que
hace algo asi:

if (se esta creando el handler del formulario)
{
throw new exception...
}

if (el handler esta creado)
{
Decirle al SO que cierre el formulario, utilizando
SendMessage de la DLL user32.dll
}
else
{
Dispose();
}

Como veras la implementacion del Close es un poco mas adecuada que
simplemente la del Dispose, ya que si el Close lo necesita lo
llamara...

Espero que ahora se haya entendido un poco mejor..

Saludos!,
Diego






Visita mi blog principal: http://rfog.blogsome.com
Y este sobre programación: http://geeks.ms/blogs/rfog
Libros, ciencia ficción y programación
Con toda seguridad, tarde o temprano, se producirá el peor conjunto
posible de circunstancias.
Respuesta Responder a este mensaje
#5 principiante
08/04/2007 - 13:08 | Informe spam
Muy buena explicacion! Se lo agradezco.


Jose TH

"Diego Jancic" escribió en el mensaje
news:
Hola,
No me referia a que funcionaba de casualidad por ser magia o algo asi
=P
Me referia a que el Dispose cierra el form debido a que usa recursos
no manejados, pero nada dice que en versiones futuras el dispose no
haga que lo cierre. Dicho de otra forma, documentacion dice algo asi:
- Close: Cierrra el Form
- Dispose: Elimina recursos no manejados

Y debido a que el form usa rec no manejados el form se cierra, pero es
una implicancia interna que actualmente ocurre.
De hecho si ves el codigo del close usando reflector, vas a ver que
hace algo asi:

if (se esta creando el handler del formulario)
{
throw new exception...
}

if (el handler esta creado)
{
Decirle al SO que cierre el formulario, utilizando
SendMessage de la DLL user32.dll
}
else
{
Dispose();
}

Como veras la implementacion del Close es un poco mas adecuada que
simplemente la del Dispose, ya que si el Close lo necesita lo
llamara...

Espero que ahora se haya entendido un poco mejor..

Saludos!,
Diego

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