Вот как я шахта:
// 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()
защищает меня от непредвиденных недостатков дизайна.
Это из моего личного опыта. В итоге используйте то, что лучше всего подходит для вашего сценария. Это всего лишь еще одна информация.
Как я уже говорил, это не странно. В приложении WPF используется статический класс. Application.Current - это ссылка на текущее приложение. – TimothyP
На мой взгляд, это немного странно в том смысле, что это не очевидно на первый взгляд, и он достаточно отличается от прошлых моделей, чтобы выбросить людей. Совершенно очевидно, что это работает. –
Положите это просто: потому что, если ваше последнее окно закрыто с ... this.Close() ... Приложение будет отключено при условии, что вы не изменили ShutdownMode. – HelloSam