¿Qué sucede cuando cierro un formulario, que se abrió usando Show()
, usando Dispose()
en lugar de Close()
? ¿Puede alguien decirme en detalle qué sucede en el método Dispose()
?Usar el método dispose() en lugar del método close() en un formulario
Respuesta
La diferencia básica entre Close()
y Dispose()
es que, cuando se llama a un método Close()
, cualquier recurso gestionado se puede cerrar temporalmente y se puede abrir una vez más. Significa que, con el mismo objeto, el recurso se puede volver a abrir o usar. Donde el método Dispose()
elimina permanentemente cualquier recurso ((des) administrado) de la memoria para la limpieza y el recurso ya no existe para ningún procesamiento posterior.
O simplemente una afirmación general. Con el objeto de conexión que llama al Close()
, se liberará la conexión nuevamente en el grupo. Llamando al Dispose()
llamará al Close()
y luego establecerá la cadena de conexión en nulo.
Algunos objetos, como Stream, implementan IDisposable
, pero el método Dispose solo está disponible si primero se aplica el objeto a un IDisposable
. Sin embargo, expone un método Close()
.
Siempre diría que debe llamar al Dispose()
en cualquier objeto que implemente IDisposable
cuando haya terminado con el objeto. Incluso si no hace nada. El compilador de jit lo optimizará de todos modos con el código final. Si el objeto contiene un Close()
pero no Dispose()
, llame al Close()
.
También puede utilizar la instrucción using de objetos IDispoable
using(SqlConnection con = new SqlConnection())
{
//code...
}
Para ello, será Dispose()
en el SqlConnection cuando se sale del bloque.
Descompilación los dos métodos (Dispose
y Close
) Resulta que este último realiza dos comprobaciones adicionales y luego llama Dispose
, al igual que este:
object[] objArray;
if (base.GetState(262144))
{
throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[] { "Close" }));
}
if (base.IsHandleCreated)
{
this.closeReason = CloseReason.UserClosing;
base.SendMessage(16, 0, 0);
return;
}
base.Dispose();
De la documentación:
Cuando una el formulario está cerrado, todos los recursos creados dentro del objeto se cierran y el formulario se elimina. [...] Las dos condiciones cuando un formulario no se elimina en Cerrar es cuando (1) es parte de una aplicación de interfaz de documentos múltiples (MDI) y el formulario no es visible; y (2) ha mostrado el formulario usando ShowDialog. En estos casos, deberá llamar a Dispose manualmente para marcar todos los controles del formulario para la recolección de elementos no utilizados.
Espero que ayude.
En realidad, en este caso Close()
y Dispose()
es bastante diferente:
Close
cierra el formulario, enviando el mensaje de Windows apropiado.Podrá volver a abrir el formulario usando Open()
Dispose
dispone completamente de los recursos de formulario, y no podrá volver a utilizar la instancia de formulario nuevamente.
- 1. ¿No es una buena idea escribir el método Dispose/Close para que sea asincrónico?
- 2. C#: el método close de Xml.Load (archivo)
- 3. ¿Cómo forzar el uso del método de extensión en lugar del método de instancia con params?
- 4. ¿Qué significa el método `close()` de la instrucción Mysqli?
- 5. C# - Usar formulario en lugar de messagebox
- 6. Propósito del patrón Dispose calling Dispose (IsDisposing) en C#?
- 7. ¿Por qué java.io.File no tiene un método close()?
- 8. ¿Cómo envío un formulario utilizando el método GET en jQuery
- 9. Cuándo llamar al método Dispose() en la aplicación WPF
- 10. HTML formulario Método PUT
- 11. Utilice el método de formulario DELETE en Html.BeginForm()?
- 12. Pasar hashes en lugar de los parámetros del método
- 13. ¿Cómo usar el método readline() en Java?
- 14. Propiedad de extensión VB en lugar del método de extensión
- 15. Publicar parámetros en una url usando el método POST sin usar un formulario
- 16. ¿Cómo usar el método POST en Tornado?
- 17. Cómo usar el método addCustomRequestHeader en selenio?
- 18. Cómo usar el método de ayuda "number_to_currency" en el modelo en lugar de ver?
- 19. Recorrer un método C# y analizar el cuerpo del método
- 20. ¿Puedo usar un método que anule un método no virtual?
- 21. ¿Puedo usar el método viewDidLoad en UITableviewCell?
- 22. Cómo usar el método Skin.AddPageMessage()?
- 23. ¿Por qué usar un método de inicialización en lugar de un constructor?
- 24. Agregue un método de ayuda de formulario
- 25. por qué no hay un método de eliminación en HttpWebResponse
- 26. Cómo usar el método onWindowFocusChanged()?
- 27. ¿Cuándo debo usar dispose() en los gráficos?
- 28. cómo usar el método onClickListener de Button en un ListView
- 29. ¿Usar el objeto del elemento con el método jQuery?
- 30. ¿Por qué usar el método Monte-Carlo?
C# no tiene formularios. Especifique WinForms/WPF/... –
@Henk Holterman: actualicé mi pregunta – Selo
[¿Debo eliminar un formulario después de cerrar el formulario?] (Https://stackoverflow.com/a/39501121/3110834) –