Правильный способ закрыть приложение WPF GUI: GetCurrentProcess ().Kill (), Окружающая Среда.Выход(0) или это.Выключение()

моя программа WPF 4.0 на основе рабочего стола GUI (C# .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.

Я хочу знать:

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

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

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

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

спасибо.

4 ответов


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

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

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

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

Ad3. Shutdown, потому что он запускает событие close

Ad4. Это зависит от того, что this - это.


использовать приложение.Текущий.Shutdown();

добавить ShutdownMode= "OnMainWindowClose" на App.в XAML


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

@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
}