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函数。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
redis集群的搭建
redis集群的搭建 一.为什么使用redis? redis是一种典型的no-sql,工作在内存中,这就意味着它的读写效率是非常高的。所以大数据量的访问导致db的压力增大,所以为了业务的稳定,需要在db层上使用多级的redis提供缓冲区 二.为什么使用redis-cluster? redis是一个内存数据库,这就意味着单个redis数据库的容量不能超过服务器的内存。所以对于大数据量的应用,就需要将数据分散到多台机器上,redis3.0版本以上开始支持cluster 。 三.redis-cluster实现原理? redis-cluster采用的是hash slot(hash槽)[0-16383]slot,把多个redis实例整合到一起,形成一个集群。redis-cluster是一个无中心的结构,每个节点都保存其它节点的状态和它负责的槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致...
- 下一篇
【C#】wpf添加gif动图支持
原文: 【C#】wpf添加gif动图支持 1.nuget里下载XamlAnimatedGif包,然后安装。 2.添加XamlAnimatedGif包的命名空间:xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif" 3.开始使用: <Image gif:AnimationBehavior.SourceUri="{StaticResource loading.gif}" Width="200" Height="20"></Image> 主要的就是把AnimatedSource设置为你的gif动画。 注意nuget库里还有个显示gif的包:WpfAnimatedGif。不建议使用这个,会导致内存泄露,最后程序崩溃。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G