Подтвердить что ты не робот

Правильный способ закрыть приложение WPF GUI: GetCurrentProcess(). Kill(), Environment.Exit(0) или this.Shutdown()

Мой графический интерфейс WPF 4.0 (С#.Net 4.0) с графическим интерфейсом работает с базой данных SQL Server. Каждый раз, когда я запускаю свое приложение, он создает соединение с SQL Server через ADO.NET Entity Framework, и если SQL Server недоступен, он генерирует исключение и показывает MessageBox с уведомлением.

Теперь я хочу, чтобы после того, как пользователь прочитал это сообщение, приложение закроется. Я нашел три способа сделать это:

Process.GetCurrentProcess().Kill();

или

this.Shutdown(); // Application.Current.Shutdown()

или

System.Environment.Exit(0);

Все они работают нормально и делают то, что мне нужно - закрыть приложение и убить процесс приложения в диспетчере задач Windows.

Я хочу знать:

  • В чем разница между ними?
  • Какой способ быстрее закроет мое приложение?
  • Какой способ закрыть приложение следует использовать?
  • Является ли Application.Current.Shutdown() и this.Shutdown() тем же способом закрыть приложение?

Или, может быть, есть еще один, более подходящий способ закрыть приложение WPF GUI?

Application.Exit() не работает для меня, поскольку я получаю ошибку:

Событие 'System.Windows.Application.Exit' может отображаться только в левой части + = или - =

Спасибо.

4b9b3361

Ответ 1

Application.Current.Shutdown() - это правильный способ отключения приложения. Вообще, потому что огонь событий выхода, которые вы можете обрабатывать больше

Process.GetCurrentProcess().Kill() следует использовать, когда вы хотите убить приложение. подробнее

Ad1. Природа этих методов совершенно различна. Процесс завершения работы может быть приостановлен, чтобы закончить некоторые операции, чтобы заставить приложение закрыться.

Ad2. Вероятно, Kill() будет самым быстрым способом, но это что-то вроде паники ядра.

Ad3. Завершение работы, поскольку оно запускает событие закрытия

ad4. Это зависит от того, что this.

Ответ 2

Используйте Application.Current.Shutdown();

Добавить ShutdownMode = "OnMainWindowClose" в App.xaml

Ответ 3

private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }

Ответ 4

@Damian Leszczyński - Ваш ответ в значительной степени охватывает 4 конкретных вопроса, которые вы задали. Для вашего последнего вопроса на Application.Exit(), это событие, на которое вы можете подписаться, а не метод, который вы можете вызвать. Его следует использовать следующим образом:

Application.Current.Exit += CurrentOnExit; 
//this.Exit += CurrentOnExit; would also work if you're in your main application class

...

private void CurrentOnExit(object sender, ExitEventArgs exitEventArgs)
{
    //do some final stuff here before the app shuts down
}