Tengo una aplicación de ventana simple de WPF que contiene cuadros de texto y botones. Y también uso NotifyIcon y DateTimePicker de Windows Forms en la ventana de WPF. ¿Cómo puedo disponer de manera efectiva todos los controles?Cuándo llamar al método Dispose() en la aplicación WPF
Respuesta
Casi nada en WPF tiene un método Dispose
. La gran mayoría de las clases encapsula información puramente administrada. Puede adjuntar un objeto al árbol (por ejemplo, a través de un método Children.Add
) y puede eliminarlo nuevamente, así es como funciona la administración del estado. No encaja exactamente en el patrón IDisposable
, porque una vez que haya eliminado un control puede agregarlo nuevamente, mientras que Dispose
significa para siempre (aunque puede usar Dispose
para administrarlo además de los métodos Add
/Remove
).
A discussion about it on the Microsoft forums.
Hay algunas cosas que debería ser IDisposable
pero no son, como DispatcherTimer
, y no hay nada que le impida la aplicación de IDisposable
en sus propias clases. Depende de usted cuándo llamar al Dispose
; básicamente cuando sabes que ya no vas a utilizar el objeto.
Para un Window
simplemente llame al Close
para cerrarlo, y WPF se ocupa de todo lo demás.
Diría que la misma regla se aplica en aplicaciones WPF como en cualquier otra aplicación .NET: si un objeto implementa IDisposable
, debe llamar al Dispose
cuando termine de usarlo. Si carga y descarga dinámicamente los controles, y no implementan IDisposable
, basta con establecer referencias a null
(y separar cualquier controlador de eventos) para que el recolector de basura pueda hacer su trabajo.
Si ese control es parte de algún IContainer (ese es el modelo común en .NET) entonces sus controles solo necesitan implementación de IDisposable. Por lo tanto, se llamará a Dispose() automáticamente cuando sea el momento apropiado.
Adhiérase a CA1001: Deje que el tipo propietario implemente IDisposable.
Renounce la verdad antigua de Windows Forms que todos los controles son IDisposable. Implemente y llame al Dispose
.
sealed partial class MainWindow : IDisposable {
readonly IDisposable disposable;
public MainWindow() {
disposable = ...
}
public void Dispose() {
disposable.Dispose();
}
protected override void OnClosed(EventArgs e) {
Dispose();
base.OnClosed(e);
}
}
- 1. ¿Cuándo NO llamar al método super() al anular?
- 2. ¿Cuándo debo usar dispose() en los gráficos?
- 3. SPWeb.Site, ¿debería llamar a Dispose() en él?
- 4. ¿Cuándo se llama al método onCreate() de la aplicación?
- 5. Cuál es la mejor aplicación de .dispose()
- 6. ¿Debo llamar a Dispose() en objetos administrados?
- 7. SendKeys.Send Método en la aplicación WPF
- 8. Llamar al método AppDelegate de la clase
- 9. ¿Cuándo llamar al lanzamiento en NSURLConnection delegate?
- 10. ASP MVC: ¿Cuándo se llama IController Dispose()?
- 11. ¿No se puede llamar a Dispose?
- 12. Navegador al revés en la aplicación WPF
- 13. Llamar al método estático genérico en PowerShell
- 14. ¿Cómo llamar al método de la ventana principal de WPF desde la ventana modal?
- 15. ¿Quién y cuándo debe llamar al método confirmCredentials de la clase AbstractAccountAuthenticator-based?
- 16. ¿Cuándo debo llamar a mainloop en una aplicación Tkinter?
- 17. ¿Qué es mejor, y cuándo: usar la declaración o llamar a Dispose() en un IDisposable en C#?
- 18. ¿Cuándo debo llamar a este método Runtime.getRuntime(). AddShutdownHook()
- 19. ¿Cuándo llama al método super en viewWillAppear, viewDidDisappear, etc ...?
- 20. ¿Cuándo debo llamar a setNeedsDisplay en iOS?
- 21. saber cuándo llamar persistir
- 22. Cuándo usar eventos sobre comandos en WPF?
- 23. ¿Cuándo llamar a cudaDeviceSynchronize?
- 24. Comprobar condición antes de llamar al método
- 25. PHP5.3: error de "Llamar al método indefinido" al llamar a invocar desde la variable de clase
- 26. ¿Cuándo se llama al método ConvertBack?
- 27. ¿Cuándo se llama al método IEnumerator.Reset()?
- 28. Cómo llamar al método didSelectRowAtIndexPath con UITapGestureRecognizer?
- 29. Comando para llamar al método desde viewmodel
- 30. Error: Intento llamar al método privado