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

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

Я пробовал:

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

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

338
12 мая '10 в 18:37
источник поделиться
13 ответов

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

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

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

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

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

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

567
12 мая '10 в 18:39
источник

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

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

Environment.Exit(0)
105
29 янв. '12 в 5:41
источник

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

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

46
29 янв. '12 в 5:31
источник

Это должно сделать трюк:

Application.Current.Shutdown();

Если вам интересно, вот некоторые дополнительные материалы, которые я нашел полезными:

Подробная информация о приложении .Current

жизненный цикл приложения WPF

21
12 мая '10 в 18:38
источник

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

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);
19
22 янв. '16 в 21:33
источник

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

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

Application.Current.Shutdown();
14
12 мая '10 в 18:41
источник

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

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

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

13
08 февр. '14 в 4:20
источник
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);
}
5
25 февр. '14 в 20:01
источник

Попробуйте

App.Current.Shutdown();

Для меня

Application.Current.Shutdown(); 

не работает.

5
25 марта '15 в 15:56
источник

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

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

4
13 мая '10 в 8:24
источник

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 });
    }
}
0
04 авг. '15 в 10:55
источник

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

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

0
19 июля '17 в 15:28
источник

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

Application.Current.Shutdown();
-1
13 авг. '14 в 13:13
источник

Посмотрите другие вопросы по меткам или Задайте вопрос