几年来,我一直在使用C#(Windows窗体),但从未使用过WPF。 但是,现在我喜欢WPF,但是当用户单击“文件”菜单中的“退出”菜单项时,我不知道如何退出应用程序。
我努力了:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
除其他外。 什么都没有。
#1楼
这是我的工作方式:
// 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(...)
处理右上方的x
按钮。 如果有任何方法要求关闭窗口,则在用户确认的情况下Window_Closing(...)
将Window_Closing(...)
事件以将其关闭。
我实际上在主窗口中使用Application.Current.Shutdown()
的原因是,我注意到如果发生了设计错误并且没有在应用程序中声明我的一个窗口的父级,在上次关闭活动窗口之前,未打开窗口而未显示该窗口,而在后台运行的是隐藏窗口。 该应用程序将不会关闭。 防止完全内存泄漏的唯一方法是让我进入任务管理器以关闭应用程序。 Application.Current.Shutdown()
保护我免受意外的设计缺陷。
那是根据我的个人经验。 最后,使用最适合您的方案的方法。 这只是另一条信息。
#2楼
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);
}
#3楼
这应该可以解决问题:
Application.Current.Shutdown();
如果您有兴趣,以下是我认为有帮助的其他材料:
#4楼
要退出您的应用程序,您可以致电
System.Windows.Application.Current.Shutdown();
如Application.Shutdown
方法的文档所述,您还可以通过指定ShutdownMode来修改应用程序的关闭行为:
在以下情况下,Windows Presentation Foundation(WPF)隐式调用Shutdown:
- 当ShutdownMode设置为OnLastWindowClose时。
- 当ShutdownMode设置为OnMainWindowClose时。
- 当用户结束会话并且SessionEnding事件未处理或已处理而没有取消时。
另请注意, Application.Current.Shutdown();
只能从创建Application
对象的线程(通常是主线程)中调用。
#5楼
不应有Application.ShutDown();
或.Exit()
消息。
Application
是静态类。 它不引用当前的应用程序。 您需要转到当前应用程序,然后按如下所示将其关闭:
Application.Current.Shutdown();
#6楼
根据我的理解, Application.Current.Shutdown()
也有其缺点。
如果要显示一个确认窗口以让用户确认是否退出,则Application.Current.Shutdown()
是不可逆的。
#7楼
尝试
App.Current.Shutdown();
为了我
Application.Current.Shutdown();
没有用
#8楼
Caliburn微风味
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 });
}
}
#9楼
根据需要使用以下任何一种:
1。
App.Current.Shutdown();
OR
Application.Current.Shutdown();
2。
App.Current.MainWindow.Close();
OR
Application.Current.MainWindow.Close();
首先,所有方法都会调用Window
类的closing event
,并且执行可能会在某个时刻停止(因为通常应用程序会在完全关闭窗口之前放置诸如“您确定吗?”或“ 您要在关闭之前保存数据吗? ”之类的对话框)
3.但是,如果您想立即终止应用程序而没有任何警告 。 在下面使用
Environment.Exit(0);
#10楼
另一种方法是:
System.Diagnostics.Process.GetCurrentProcess().Kill();
这将强制终止您的应用程序。 即使在多线程应用程序中,它也始终有效。
注意:请注意不要在另一个线程中丢失未保存的数据。
#11楼
从xaml代码中,您可以调用预定义的SystemCommand:
Command="SystemCommands.MinimizeWindowCommand"
我认为这应该是首选的方式...
#12楼
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
#13楼
如wuminqi所说 , Application.Current.Shutdown();
是不可逆的,我相信它通常用于强制应用程序在用户注销或关闭Windows时关闭。
而是在主窗口中调用this.close()
。 这与按Alt + F4或窗口上的关闭[x]按钮相同。 这将导致所有其他所有窗口关闭,并最终调用Application.Current.Shutdown();
只要不取消关闭动作即可。 请参阅有关关闭窗口的MSDN文档。
另外,由于this.close()
是可取消的,因此您可以在关闭事件处理程序中放入保存更改确认对话框。 只需为<Window Closing="...">
创建事件处理程序,然后相应地更改e.Cancel
。 (有关如何执行此操作的更多详细信息,请参阅MSDN文档 。)
#14楼
如果确实需要关闭它,则也可以使用Environment.Exit() ,但它一点也不优雅(更像是结束进程)。
如下使用它:
Environment.Exit(0)