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

StackOverflow https://stackoverflow.com/questions/3880836

Вопрос

My GUI Desktop на основе программы WPF 4.0 (C # .NET 4.0) работает с базой данных SQL Server. Каждый раз, когда я запускаю свое приложение, он создает подключение к SQL Server через Framework Entity Ado.net, и если 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«Может появиться только на левой стороне + = или - =

Спасибо.

Это было полезно?

Решение

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

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

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

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

AD3. Отключение, потому что он запускает тесное событие

AD4. Которые зависят от чего this является.

Другие советы

Использовать Application.Current.shutdown ();

Добавлять ShutDownMode = "OnMainWindowClose" в App.xaml.

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

@Damian Leszzzyń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
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top