Tengo una ventana que contiene un UserControl personalizado. El UserControl necesita saber cuándo se ha cerrado la Ventana que lo contiene para que pueda terminar un hilo.WPF Window.Close() no desencadena el evento UserControl.Unloaded
Mi mejor conjetura sobre cómo lograr esto es manejar el evento descargado de UserControl. Sin embargo, el evento descargado solo parece activarse cuando el usuario realmente hace clic para cerrar la ventana, pero no cuando llamo programáticamente al método Close() en la ventana.
Como referencia, aquí están algunas de las partes relevantes de mi código.
MyWindow.xaml:
<Window x:Class="Namespace.MyWindow"
xmlns:controls="clr-namespace:Namespace.Controls">
<controls:MyControl/>
</Window>
MyControl.xaml:
<UserControl x:Class="Namespace.Controls.MyControl"
Unloaded="UserControl_Unloaded"/>
<!-- Stuff -->
</UserControl>
MyControl.xaml.cs:
void UserControl_Unloaded(object sender, RoutedEventArgs e)
{
// Stop the thread.
}
Así que para recapitular, el UserControl_Unloaded() método anterior se está llamando cuando cierro la ventana "manualmente" (alt-F4, haga clic en la "X" roja, etc.), pero no cuando esté en otro lugar del código Llamo al myWindow.Close()
. ¿Algunas ideas?
De la documentación: tenga en cuenta que el evento descargado no se genera después de que una aplicación comienza a cerrarse. El apagado de la aplicación se produce cuando se produce la condición definida por la propiedad ShutdownMode. Si coloca el código de limpieza dentro de un controlador para el evento descargado, como para una ventana o un control de usuario, es posible que no se llame como se esperaba. –