Ho una finestra che contiene un UserControl personalizzato. UserControl deve sapere quando la finestra che lo contiene è stato chiuso in modo che possa terminare un thread.WPF Window.Close() non attiva l'evento UserControl.Unloaded
La mia ipotesi migliore su come eseguire ciò è gestire l'evento Unloaded di UserControl. Tuttavia, l'evento Unloaded sembra essere attivato solo quando l'utente fa effettivamente clic per chiudere la finestra, ma non quando chiamo programmaticamente il metodo Close() sulla finestra.
Per motivi di riferimento, ecco alcune delle parti rilevanti del mio codice.
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.
}
Quindi, solo per ricapitolare, l'UserControl_Unloaded() metodo di cui sopra viene chiamato quando chiudo la finestra "manualmente" (alt-F4, fai clic sulla "X" rossa, ecc.), ma non quando provi da un'altra parte del codice Chiamo myWindow.Close()
. Qualche idea?
Dalla documentazione: si noti che l'evento Unloaded non viene generato dopo l'avvio di un'applicazione. L'arresto dell'applicazione si verifica quando si verifica la condizione definita dalla proprietà ShutdownMode. Se si inserisce codice di pulitura all'interno di un gestore per l'evento Unloaded, ad esempio per una finestra o un controllo utente, è possibile che non venga chiamato come previsto. –