Правильный способ закрыть приложение GUF WPF: GetCurrentProcess (). Kill (), Environment.Exit (0) или this.Shutdown () - PullRequest
49 голосов
/ 07 октября 2010

Программа WPF 4.0 (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 ]

68 голосов
/ 07 октября 2010

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

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

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

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

Ad3. Выключение, потому что запускается событие закрытия

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

2 голосов
/ 13 декабря 2015

Использование Application.Current.Shutdown ();

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

1 голос
/ 18 октября 2016

@ Дамиан Лещинский - ответ Vash в значительной степени охватывает 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
}
1 голос
/ 23 мая 2016
private void ExitMenu_Click(object sender, RoutedEventArgs e)
    {
        Application.Current.Shutdown();
    }
...