在我使用C#(Windows Forms)的几年里,我从未使用过WPF.但是,现在我喜欢WPF,但是当用户点击"文件"菜单中的"退出"菜单项时,我不知道如何退出应用程序.
我试过了:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
Run Code Online (Sandbox Code Playgroud)
其中许多人.什么都行不通.
Dir*_*mar 741
要退出您的应用程序,您可以致电
System.Windows.Application.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
如该Application.Shutdown方法的文档中所述,您还可以通过指定ShutdownMode来修改应用程序的关闭行为:
在以下情况下,Windows Presentation Foundation(WPF)会隐式调用Shutdown:
- 当ShutdownMode设置为OnLastWindowClose时.
- 当ShutdownMode设置为OnMainWindowClose时.
- 当用户结束会话并且SessionEnding事件未处理或处理而没有取消时.
还请注意,Application.Current.Shutdown();只能从创建Application对象的线程调用,即通常是主线程.
Joh*_*ohn 147
如果你真的需要它关闭,你也可以使用Environment.Exit(),但它根本不优雅(更像是结束进程).
使用方法如下:
Environment.Exit(0)
Run Code Online (Sandbox Code Playgroud)
All*_*uky 61
正如wuminqi所说,Application.Current.Shutdown();是不可逆转的,我相信它通常用于强制应用程序关闭,例如当用户注销或关闭Windows时.
而是this.close()在主窗口中调用.这与按窗口上的Alt+ F4或关闭[x]按钮相同.这将导致所有其他拥有的窗口关闭,并且Application.Current.Shutdown();只要关闭操作未被取消,它将结束调用.请参阅关闭窗口的MSDN文档.
此外,因为this.close()是可取消的,您可以在结束事件处理程序中放入保存更改确认对话框.只需为事件处理程序创建<Window Closing="...">并相应地更改e.Cancel.(有关如何执行此操作的详细信息,请参阅MSDN文档.)
Kyl*_*Ren 33
根据需要使用以下任何一项:
1.
App.Current.Shutdown();
OR
Application.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
2.
App.Current.MainWindow.Close();
OR
Application.Current.MainWindow.Close();
Run Code Online (Sandbox Code Playgroud)
上述所有方法将调用closing event的Window类和执行可能在某一时刻停止(原因通常应用把对话像"你确定吗?"或者" 你想在关闭之前保存数据? ",之前完全关闭的窗口)
3.但是如果你想立即终止申请而没有任何警告.使用下面
Run Code Online (Sandbox Code Playgroud)Environment.Exit(0);
Bri*_*Kay 25
这应该做的伎俩:
Application.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
如果您有兴趣,这里有一些我觉得有用的其他材料:
B.K*_*.K. 18
这就是我的做法:
// 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();
}
}
Run Code Online (Sandbox Code Playgroud)
我只Application.Current.ShutDown()从主应用程序窗口调用,所有其他窗口都使用this.Close().在我的主窗口中,Window_Closing(...)处理右上方的x按钮.如果任何方法要求窗口Window_Closing(...)关闭,则在用户确认时抓取事件以关闭窗口.
我实际上Application.Current.Shutdown()在我的主窗口中使用的原因是我注意到如果设计错误并且我没有在应用程序中声明我的一个窗口的父窗口,如果该窗口打开而没有显示之前到最后一个活动窗口关闭,我留下了一个在后台运行的隐藏窗口.该应用程序不会关闭.防止完全内存泄漏的唯一方法是让我进入任务管理器关闭应用程序. Application.Current.Shutdown()保护我免受意外的设计缺陷.
这是我个人的经验.最后,使用最适合您场景的方法.这只是另一条信息.
Tim*_*hyP 16
不应该有消息Application.ShutDown();或.Exit()消息.
Application是一个静态类.它不涉及当前的应用程序.您需要转到当前应用程序,然后将其关闭,如下所示:
Application.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
总结一下,有几种方法可以做到这一点。
1)杀死进程,跳过终结,错误处理等:
Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)
2)关闭当前应用程序,这可能是正确的方法,因为它会调用退出事件:
Application.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
或者
this.Shutdown();
Run Code Online (Sandbox Code Playgroud)
(当在 App 类的实例中调用时)
3)关闭当前应用程序(所有表格必须提前关闭/完成):
this.Close();
Run Code Online (Sandbox Code Playgroud)
(当在 App 类的实例中调用时)
4)退出环境,终止应用程序:
Environment.Exit(0);
Run Code Online (Sandbox Code Playgroud)
据我了解,Application.Current.Shutdown()也有其缺点.
如果您想显示确认窗口以让用户确认是否退出,Application.Current.Shutdown()则不可逆转.
小智 6
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);
}
Run Code Online (Sandbox Code Playgroud)
尝试
App.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
为了我
Application.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
没用.
另一种方法可以做到这一点:
System.Diagnostics.Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)
这将强制终止您的应用程序正在多线程应用程序中工作.
注意:只关心一个将数据保存在另一个线程的文件中的应用程序.
| 归档时间: |
|
| 查看次数: |
325086 次 |
| 最近记录: |