En el caso de cierre de la aplicación, no hay nada que deba hacer para deshacerse correctamente de WindowsFormsHost. Como se deriva de HwndHost, la eliminación se realiza cuando el Dispatcher se cierra. Si usa Reflector, verá que cuando HwndHost se inicializa crea un WeakEventDispatcherShutdown.
Si lo usa en un cuadro de diálogo, lo mejor que puedo sugerir es anular OnClosed y deshacerse de su Host, de lo contrario, HwndHost se mantendrá hasta que se cierre el Dispatcher.
public partial class Dialog : Window
{
public Dialog()
{
InitializeComponent();
}
protected override void OnClosed(EventArgs e)
{
if (host != null)
host.Dispose();
base.OnClosed(e);
}
}
Una manera simple de probar cuando se llama a disponer es derivar una clase personalizada de WindowsFormsHost y jugar con diferentes situaciones. Ponga un punto de quiebre en el desecho y vea cuándo se llama.
public class CustomWindowsFormsHost : WindowsFormsHost
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
}
Cuando dice 'durante el cierre', ¿quiere decir que la aplicación se está cerrando? El control ya no es visible? ¿Se está cerrando un diálogo? –
Me refiero al apagado de la aplicación, pero también me interesa el caso de cierre del diálogo. – morechilli