He creado un control de usuario WPF personalizado que está destinado a ser utilizado por un tercero. Mi control tiene un miembro privado que es desechable, y me gustaría asegurar que siempre se llame a su método de eliminación una vez que se cierre la ventana/aplicación que lo contiene. Sin embargo, UserControl no es desechable. Intenté implementar la interfaz IDisposable y suscribirme al evento descargado, pero ninguno se llama cuando la aplicación anfitriona se cierra. Si es posible, no quiero depender de los consumidores de mi control que recuerden llamar a un método específico de Disposición.Desecho Controles de usuario WPF
public partial class MyWpfControl : UserControl
{
SomeDisposableObject x;
// where does this code go?
void Somewhere()
{
if (x != null)
{
x.Dispose();
x = null;
}
}
}
La única solución que he encontrado hasta ahora es suscribirse al evento ShutdownStarted del despachador. ¿Es este un enfoque razonable?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
¿Qué pasa con el caso sin carga del control de usuario? – akjoshi
@akjoshi: MSDN dice que: El evento descargado no se puede subir en absoluto.Y también podría activarse más de una vez, es cuando el usuario cambia de tema. – Dudu
Aunque podría implementar la interfaz IDisposable en su control de usuario, no hay garantía de que su tercero llamará al método de eliminación de su implementación de patrón de eliminación. Si se aferra a los recursos nativos (por ejemplo, una secuencia de archivos), debe considerar usar un finalizador. – Philippe