Вот как я делаю мои:
// 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();
}
}
Я звоню только Application.Current.ShutDown()
из главного окна приложения, все остальные окна используют this.Close()
. В моем главном окне Window_Closing(...)
обрабатывает верхнюю правую x
кнопку. Если какой-либо из методов вызывает окно ближе, Window_Closing(...)
захватывает событие для выключения, если пользователь подтверждает.
Причина, по которой я действительно использую Application.Current.Shutdown()
свое главное окно, заключается в том, что я заметил, что если была допущена ошибка проектирования, и я не объявил родителя одного из моих окон в приложении, если это окно открывается без предварительного отображения до последнего закрытия активного окна у меня остается скрытое окно, работающее в фоновом режиме. Приложение не будет закрыто. Единственный способ предотвратить полную утечку памяти - это зайти в диспетчер задач, чтобы закрыть приложение. Application.Current.Shutdown()
защищает меня от непреднамеренных недостатков дизайна.
Это из моего личного опыта. В конце концов, используйте то, что лучше для вашего сценария. Это просто еще одна часть информации.