Benimkini şöyle yaparım:
// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if (response == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
Application.Current.Shutdown();
}
}
Ben sadece Application.Current.ShutDown()
ana uygulama penceresinden çağırıyorum , diğer tüm pencereleri kullanın this.Close()
. Ana penceremde Window_Closing(...)
sağ üstteki x
düğmeyi işler . Yöntemlerden herhangi biri pencereyi daha yakına çağırırsa, Window_Closing(...)
kullanıcı onaylarsa etkinliği kapatır.
Aslında Application.Current.Shutdown()
ana penceremde kullanmamın nedeni , bir tasarım hatası yapıldıysa ve bir uygulamada pencerelerimden birinin üst öğesini bildirmediysem, bu pencere daha önce gösterilmeden açılırsa son aktif pencerenin kapanışına kadar, arka planda çalışan gizli bir pencere bıraktım. Uygulama kapanmayacak. Tam bellek sızıntısını önlemenin tek yolu uygulamayı kapatmak için Görev Yöneticisi'ne gitmektir . Application.Current.Shutdown()
beni istenmeyen tasarım kusurlarından korur.
Bu benim kişisel deneyimimden. Sonunda, senaryonuz için en iyisini kullanın. Bu sadece başka bir bilgi parçası.