Как программно выйти из приложения WPF?

В течение нескольких лет, когда я использовал С# (WinForms), я никогда не использовал WPF. Но теперь я люблю WPF, но я не знаю, как я должен выйти из приложения, когда пользователь нажимает на пункт меню "Выход" из меню "Файл".

Я пробовал:

this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();

Среди многих других. Ничего не работает.

Ответ 1

Чтобы выйти из приложения, вы можете позвонить

System.Windows.Application.Current.Shutdown();

Как описано в документации к Application.Shutdown, вы также можете изменить поведение выключения приложения, указав ShutdownMode:

Выключение неявно вызывается Windows Presentation Foundation (WPF) в следующих ситуациях:

  • Когда ShutdownMode установлен на OnLastWindowClose.
  • Когда для параметра ShutdownMode установлено значение OnMainWindowClose.
  • Когда пользователь заканчивает сеанс, и событие SessionEnding либо необработанно, либо обрабатывается без отмены.

Также обратите внимание, что Application.Current.Shutdown(); может вызываться только из потока, создавшего объект Application, т.е. обычно основной поток.

Ответ 2

Если вам действительно нужно закрыть его, вы также можете использовать Environment.Exit(), но это совсем не изящно (больше похоже на завершение процесс).

Используйте следующее:

Environment.Exit(0)

Ответ 3

Как сказал wuminqi, Application.Current.Shutdown(); является необратимым, и я считаю, что он обычно используется для принудительного закрытия приложения, например, когда пользователь выходит из системы или выключает Windows. Вместо этого вызовите this.close() в главное окно. Это то же самое, что нажать "ALT-F4" или кнопку закрытия [x] в окне. Это приведет к закрытию всех остальных закрытых окон и вызовет вызов Application.Current.Shutdown();, пока действие закрытия не будет отменено. См. Документацию MSDN на Закрытие окна.

Кроме того, поскольку this.close() можно отменить, вы можете поместить в диалог подтверждения изменений изменений в обработчик закрывающего события. Просто создайте обработчик событий для <Window Closing="..."> и измените e.Cancel соответственно. (Подробнее о том, как это сделать, см. документ MSDN

Ответ 5

При необходимости используйте любое из следующих действий:

1.

 App.Current.Shutdown();
OR
 Application.Current.Shutdown();

2.

 App.Current.MainWindow.Close();
OR
 Application.Current.MainWindow.Close();

Прежде всего методы вызовут closing event класса Window, и выполнение может прекратиться в какой-то момент (так как обычно приложения ставят диалоги типа ) уверен? ' или' Вы хотите сохранить данные перед закрытием? ', прежде чем окно будет полностью закрыто)

3. Но если вы хотите немедленно закрыть приложение без предупреждения. Используйте ниже

   Environment.Exit(0);

Ответ 6

Не должно быть Application.ShutDown(); или .Exit().

Приложение представляет собой статический класс. Он не относится к текущему приложению Вам нужно перейти к текущему приложению, а затем закрыть его следующим образом:

Application.Current.Shutdown();

Ответ 7

Вот как я делаю свое:

// 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() защищает меня от непреднамеренных недостатков дизайна.

Это из моего личного опыта. В итоге используйте то, что лучше всего подходит для вашего сценария. Это всего лишь еще одна информация.

Ответ 8

private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
   System.Windows.Application.Current.MainWindow.Close();
}

//Override the onClose method in the Application Main window

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    MessageBoxResult result =   MessageBox.Show("Do you really want to close", "",
                                          MessageBoxButton.OKCancel);
    if (result == MessageBoxResult.Cancel)
    {
       e.Cancel = true;
    }
    base.OnClosing(e);
}

Ответ 9

Попробуйте

App.Current.Shutdown();

Для меня

Application.Current.Shutdown(); 

не работает.

Ответ 10

По моему мнению, Application.Current.Shutdown() также имеет свой недостаток,

если вы хотите показать окно подтверждения, чтобы пользователи могли подтвердить, что вы вышли или нет, Application.Current.Shutdown() является необратимым.

Ответ 11

Caliburn micro flavored

public class CloseAppResult : CancelResult
{
    public override void Execute(CoroutineExecutionContext context)
    {
        Application.Current.Shutdown();
        base.Execute(context);
    }
}

public class CancelResult : Result
{
    public override void Execute(CoroutineExecutionContext context)
    {
        OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
    }
}

Ответ 12

Мы можем использовать метод this.Close() в файле MainWindow.xaml.cs, чтобы закрыть окно.

Или используйте метод App.Current.Shutdown() в файле MainWindow.xaml.cs, чтобы закрыть окно.

Ответ 13

Очень просто, используйте приведенный ниже код

Application.Current.Shutdown();