How do I exit a WPF application programmatically?
在这几年里,我一直在使用C(Windows窗体),我从来没有使用过WPF。但是,现在我喜欢WPF,但是我不知道当用户单击"文件"菜单中的"退出"菜单项时,该如何退出我的应用程序。
我已经尝试过:
1 2 3 4 5 | this.Dispose(); this.Exit(); Application.ShutDown(); Application.Exit(); Application.Dispose(); |
在许多其他方面。没有效果。
要退出应用程序,可以调用
1 | System.Windows.Application.Current.Shutdown(); |
如
Shutdown is implicitly called by Windows Presentation Foundation (WPF) in the following situations:
- When ShutdownMode is set to OnLastWindowClose.
- When the ShutdownMode is set to OnMainWindowClose.
- When a user ends a session and the SessionEnding event is either unhandled, or handled without cancellation.
还请注意,只能从创建
如果您真的需要它来关闭,您也可以使用environment.exit(),但它一点也不优雅(更像是结束进程)。
使用方法如下:
1 | Environment.Exit(0) |
正如吴敏奇所说,
相反,在主窗口中调用
另外,由于
根据需要使用以下任一项:
1。
1 2 3 | App.Current.Shutdown(); OR Application.Current.Shutdown(); |
2。
1 2 3 | App.Current.MainWindow.Close(); OR Application.Current.MainWindow.Close(); |
最重要的是,所有方法都将调用
三。但如果您希望立即终止应用程序而不发出任何警告。使用如下
1 Environment.Exit(0);
这应该可以做到:
1 | Application.Current.Shutdown(); |
如果你感兴趣,这里有一些我觉得有用的附加材料:
有关应用程序的详细信息。当前
WPF应用程序生命周期
以下是我的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 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(); } } |
我只从主应用程序窗口调用
实际上,我在主窗口中使用
那是我个人的经验。最后,使用最适合您的方案。这只是另一条信息。
不应该有
1 | Application.Current.Shutdown(); |
另一种方法是:
1 | System.Diagnostics.Process.GetCurrentProcess().Kill(); |
这将强制终止应用程序。它总是有效的,即使在多线程应用程序中也是如此。
注意:注意不要在另一个线程中丢失未保存的数据。
尝试
1 | App.Current.Shutdown(); |
为了我
1 | Application.Current.Shutdown(); |
不起作用。
据我了解,
如果您想显示一个确认窗口,让用户在退出时确认,那么
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); } |
Caliburn微香型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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代码中,可以调用预定义的系统命令:
1 | Command="SystemCommands.MinimizeWindowCommand" |
我认为这应该是最好的方式…