Mam okno, które zawiera niestandardową kontrolkę UserControl. UserControl musi wiedzieć, kiedy okno zawierające je zostało zamknięte, aby mogło zakończyć wątek.Okno dialogowe WPF Window.Close() nie wyzwala zdarzenia UserControl.Unloaded
Moim najlepszym przypuszczeniem, jak to zrobić, jest obsługa zdarzenia Unloaded UserControl. Jednak zdarzenie Unloaded wydaje się być uruchamiane tylko wtedy, gdy użytkownik kliknie, aby zamknąć okno, ale nie wtedy, gdy programowo wywołam metodę Close() w oknie.
Dla odniesienia, oto niektóre z istotnych części mojego kodu.
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.
}
Więc po prostu zakręcić The UserControl_Unloaded() metoda powyżej jest wywoływana, gdy zamykam okno "ręcznie" (alt-F4, klikam na czerwonym "X" itp.), ale nie wtedy, gdy z innego miejsca w kodzie Dzwonię pod numer myWindow.Close()
. Jakieś pomysły?
Z dokumentacji: Zwróć uwagę, że zdarzenie Unloaded nie jest wywoływane po zamknięciu aplikacji. Zamykanie aplikacji następuje, gdy wystąpi warunek zdefiniowany przez właściwość ShutdownMode. Jeśli umieścisz kod czyszczenia w module obsługi dla zdarzenia Unloaded, na przykład dla Window lub UserControl, może on nie zostać wywołany zgodnie z oczekiwaniami. –