WPF关闭应用汇总

简介: 原文:WPF关闭应用汇总 就本人而言,C#中关闭应用主要有以下途径: 1.Close():关闭当前窗口,可以在OnClosing和 OnClosed中捕获消息,在OnClosing的时候,可以取消关闭窗口 2.
原文: WPF关闭应用汇总

就本人而言,C#中关闭应用主要有以下途径:

1.Close():关闭当前窗口,可以在OnClosing和 OnClosed中捕获消息,在OnClosing的时候,可以取消关闭窗口

2.Application.Current.Shutdown()/App.Current.Shutdown(): 关闭当前程序,如果有其他线程没有结束,不会关闭

3.Environment.Exit(0):强制退出,即使有其他的线程没有结束

4.Process类的CloseMainWindow, Kill:Process.CloseMainWindow是GUI程序的最友好结束方式,从名字上就可以看出来它是通过结束主窗体,相当于用户点击窗体的关闭按钮或者按Alt + F4

5.Environment类的FailFast:这是最暴力最彻底最直接的方法,一般不建议使用

现对各方式做简单的介绍:

Close():如过调用了Close,而在Closing中没有显示的取消退出,则系统可以退出,这种情况仅仅是在没有多余线程,没有其他窗口启动的时候,如果有其他窗口同时启动,则要考虑App.Current.ShutdownMode。

Application.Current.Shutdown()/App.Current.Shutdown():其使用讲究最多。

在WPF应用程序的关闭是有ShutdownMode属性设置,具有3中枚举类型的值:
1)OnLastWindowClose(默认值)---应用程序最后一个窗体关闭时关闭应用程序
2)OnMainWindowClose---应用程序主窗体关闭时关闭应用程序
3)OnExplicitShutdown---显示调用关闭

示例如下:

<Application x:Class="TestApplication.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation%22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml%22
StartupUri="Window1.xaml"
ShutdownMode="OnMainWindowClose">
</Application>

Environment.Exit(0):Environment.Exit相当于在Main函数中的return指令。不过它不会执行代码块的finally块(如果有的话),但资源清理还是要进行的。它是最常见的退出当前进程的方法之一。在Main函数中我们可以直接return语句便退出了程序。如果不在Main函数内,那么Environment.Exit方法就可以派上用场。

示例如下:

private void CloseApp() {
CloseSignal();
AppManager.Instance.Close();
Environment.Exit(0);
}

Environment类的FailFast:此方法更速度,它甚至不需要向操作系统返回进程退出代码(ExitCode),直接结束当前进程并在应用程序事件薄中写入信息,用于程序出现致命错误需要立即停止。


Process.Kill:从名字也可以看出来,直接杀掉,不给喘息喘息机会,Kill方法会直接结束整个进程,不进行常规资源清理(什么finally块等……)。Kill本质调用本地API:TerminateProcess函数。




参考:C#各种结束进程的方法详细介绍 

        WPF Application Shutdown Mode


目录
相关文章
|
C#
用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能
原文:用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能   在管理信息系统的开发过程中,往往会涉及到一些线性规划数学模型,例如资源配置优化。微软的Microsoft.Solver.Foundation是一个数学库,可以很好的对线性规划问题进行求解。
1374 0
|
C#
[WPF]为旧版本的应用添加触控支持
原文:[WPF]为旧版本的应用添加触控支持 之前做WPF开发时曾经遇到这样一个需求:为一个基于 .NET Framework 3.5开发的老旧WPF程序添加触控支持,以便于大屏触控展示。 接手之后发现这是一个大坑。
882 0
|
C# Windows
WPF程序在Windows 7下应用Windows 8主题
原文:WPF程序在Windows 7下应用Windows 8主题 这篇博客介绍如何在Windows 7下应用Windows 8的主题。 首先我们先看一个很常见的场景,同样的WPF程序(样式未重写)在不同的操作系统上展示会有些不同。
1013 0
|
C# 编解码 区块链
WPF中应用字体图标
原文:WPF中应用字体图标 一、什么是字体图标          我们在进行GDI(图形界面)编程的过程中图标是不可少的。近些年随着网络的繁荣和移动应用的繁荣,矢量图的应用越来越火。          矢量图是一种用数学方法描述的、由一系列点和线组成的图,因此相比位图文件比较小,并且还和分辨率无关。
962 0
|
C# 容器
WPF模板(二)应用
原文:WPF模板(二)应用           本次内容来源于电子书,和上一篇一样。 在WPF中有三大模板ControlTemplate,ItemsPanelTemplate,DataTemplate.其中ControlTemplate和ItemsPanelTemplate是控件模板,DataTemplate是数据模板,他们都派生自FrameworkTemplate抽象类。
789 0
|
C# Windows
使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等
原文:使WPF程序应用预置的控件风格, 如Aero, Luna, Royale, Classic等      WPF预设有Aero, Classic, Luna, Royale主题, WPF程序会根据Windows主...
1231 0
|
消息中间件 C# Windows
WPF的消息机制(一)- 让应用程序动起来
原文:WPF的消息机制(一)- 让应用程序动起来 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/powertoolsteam/article/details/6106485 ...
1032 0
|
C# Windows Web App开发
WPF 应用完全模拟 UWP 的标题栏按钮
原文:WPF 应用完全模拟 UWP 的标题栏按钮 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1038 0
|
C# 数据安全/隐私保护 Windows
WPF Event 在 Command 中的应用初级篇,支持所有Event 展示松耦合设计的全部代码 - 解决TextBoxBase.TextChanged或者TextBox.TextChanged等类似事件绑定问题。
原文:WPF Event 在 Command 中的应用初级篇,支持所有Event 展示松耦合设计的全部代码 - 解决TextBoxBase.TextChanged或者TextBox.TextChanged等类似事件绑定问题。
1286 0
|
C# 小程序
WPF 3D变换应用
原文:WPF 3D变换应用  WPF可以提供的3D模型使我们可以轻松地创建3D实体,虽然目前来看还很有一些性能上的问题,不过对于一些简单的3D应用应该是可取的,毕竟其开发效率高,而且也容易上手。         下面给大家演示的是使用在WPF 3D上实现视角变换,通过鼠标拖动来变换观察视角,通过滚轮来放缩视距。
702 0