Как я могу выйти из приложения WPF программно?
в течение нескольких лет я использую C# (Windows Forms), я никогда не использовал WPF. Но, теперь я люблю WPF, но я не знаю, как я должен выйти из моего приложения, когда пользователь нажимает на пункт меню Выход из меню Файл.
Я пробовал:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
среди многих других. Ничего не работает.
15 ответов:
для выхода из приложения вы можете позвонить
System.Windows.Application.Current.Shutdown();как описано в документации к
Application.Shutdownметод вы также можете изменить поведение завершения работы вашего приложения, указав ShutdownMode:Shutdown неявно вызывается Windows Presentation Foundation( WPF) в следующих ситуациях:
- когда ShutdownMode установлен в OnLastWindowClose.
- когда ShutdownMode имеет значение OnMainWindowClose.
- когда пользователь завершает сеанс и событие SessionEnding либо не обрабатывается, либо обрабатывается без отмены.
обратите внимание, что
Application.Current.Shutdown();может быть вызван только из потока, который создалApplication"объект", т. е. обычно основной поток.
Если вы действительно нужно, чтобы закрыть вы также можете использовать окружающая среда.Exit (), но это совсем не изящно (больше похоже на завершение процесса).
использовать его следующим образом:
Environment.Exit(0)
как wuminqi сказал,
Application.Current.Shutdown();является необратимым, и я считаю, что он обычно используется для принудительного закрытия приложения в такие моменты, как когда пользователь выходит из системы или завершает работу Windows.вместо этого позвоните
this.close()в главном окне. Это то же самое, что нажать Alt + F4 или кнопку Закрыть [x]в окне. Это приведет к закрытию всех других принадлежащих окон и в конечном итоге вызоветApplication.Current.Shutdown();пока близко не отмененный. Пожалуйста, смотрите документацию MSDN на закрыть окно.кроме того, потому что
this.close()отменяется вы можете поместить в диалоговом окне подтверждения сохранения изменений в обработчике событий закрытия. Просто сделайте обработчик событий для<Window Closing="...">, иe.Cancelсоответственно. (См. Примечание для получения более подробной информации о том, как это сделать.)
при необходимости используйте любое из следующих средств:
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);
Это должно сделать трюк:
Application.Current.Shutdown();Если вам интересно, вот некоторые дополнительные материалы, которые я нашел полезными:
вот как я делаю мои:
// 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(...)обрабатывает верхний правый . Если какой-либо из методов вызывает window closer,Window_Closing(...)захватывает событие для завершения работы, если пользователь подтверждает.причина, по которой я на самом деле использовать
Application.Current.Shutdown()в моем главном окне я заметил, что если была допущена ошибка дизайна, и я не объявил родителя одного из моих окна в приложении, если это окно открывается без отображения до последнего активного закрытия окна, я остаюсь со скрытым окном, работающим в фоновом режиме. Приложение не будет закрыто. Единственный способ предотвратить полную утечку памяти для меня, чтобы пойти в Диспетчер Задач закрыть приложение.Application.Current.Shutdown()защищает меня от непреднамеренных недостатков дизайна.это из моего личного опыта. В конце концов, используйте то, что лучше всего подходит для вашего сценария. Это просто еще одна часть информации.
не должно быть
Application.ShutDown();или.Exit()сообщение.
Applicationявляется статическим классом. Это не относится к текущему приложению. Вам нужно добраться до текущего приложения, а затем закрыть его, как это:Application.Current.Shutdown();
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); }
по моему разумению,
Application.Current.Shutdown()также имеет свой недостаток.Если вы хотите показать окно подтверждения, чтобы пользователи могли подтвердить выход или нет,
Application.Current.Shutdown()необратим.
еще один способ сделать это:
System.Diagnostics.Process.GetCurrentProcess().Kill();это заставит убить ваше приложение в процессе всегда работает в многопоточном приложении.
Примечание: просто заботиться о приложении, которое имеет сохранить данные в файлах из другого потока.
Caliburn micro flavoured
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 }); } }
из кода xaml вы можете вызвать предопределенный SystemCommand:
Command="SystemCommands.MinimizeWindowCommand"Я думаю, это должно быть предпочтительным способом...
мы можем использовать
this.Close()методMainWindow.xaml.csфайл для закрытия окна.или использовать
App.Current.Shutdown()методMainWindow.xaml.csфайл для закрытия окна.
Comments