C# 程序的关闭 讲究解释
程序的关闭是很讲究的,处理的不好的话,将软件连续开启和关闭,当数次后在启动软件后程序会崩溃。或者程序退出很慢。细节决定成败,一款好的软件应该从各方面都要做严格地反复地推敲,力争做到无可挑剔。
有的程序员喜欢在关闭的时候让程序做一些事情,比如保存一些记录什么的,我觉得这样大可不必,因为这些会影响退出的时间,单一职责原则一再强调职责要单一,关闭程序就是关闭程序,不要掺杂其它动作。
当然仅仅一个关闭也有很多种方式的,比如窗体Close(),Application.Exit(),Application.ExitThread(),Enviroment.Exit(0),以及Process.GetCurrentProcess().Kill()。这些相信大家在退出时都用到过。这些方法都可以退出程序。在我做的最初的一个项目中,由于刚开始没有全面的设计,很多功能都是大家有了新的想法而加上的,因此里面大量用到了线程,有名字的,没名字的,有的可以管理,有的根本没法获取它并管理它。在退出子窗口的时候,一般使用当前Form.Close(),然后将该窗口内的线程获取到,再一一Abort(),但是在退出主程序的时候,this.Close(),就很慢了,因为很多线程还在运行。所以当时就使用杀死进程的方法。
以上那些退出的方法我都使用过。
2、Application.Exit():这个当有线程时,也要等很久。
3、Application.ExitThread():出当前线程上的消息循环,并关闭该线程的窗口。
4、Enviroment.Exit(0):该方法强制退出。
5、Process.GetCurrentProcess().Kill():当你觉得其它方法退出不太及时或者失灵,那么这个方法就是终极法宝,直接干掉进程,当然也退出了。
当然了,程序退出时,程序自己要处理很多资源,最安全的方式就是,主窗体Close方法,然后剩下的交给程序做,虽然退出慢,但是这是程序自身的机制去完成的退出绝对安全。可是用户会允许你这么做吗,如果你的软件点击关闭了结果在进程中还生存了很久,或者半天还是放不了资源,那么用户很可能不再使用你的程序。所以本着一切为用户着想的原则,退出还是速度快为好。我常用的方式是。
1、窗体.Close();
2、Process.GetCurrentProcess().Kill();
同时使用。
C# 程序的关闭 讲究解释的更多相关文章
- 应用程序的关闭退出(在FMX中,Activity替代了Form的概念)
在VCL中,关闭程序的主窗体也就意味着程序的主循环结束,主程序自然而然结束.所以在主窗体中使用窗体的关闭函数(Close)即可,如下: procedure TfrmMain.btncloseClick ...
- android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...
- 以&运行在后台的程序,关闭terminal后,相应进进程自动关闭
以&运行在后台的程序,关闭terminal后,相应进进程自动关闭
- C# 程序异常关闭时的捕获
本文主要以一个简单的小例子,描述C# Winform程序异常关闭时,如何进行捕获,并记录日志. 概述 有时在界面的事件中,明明有try... catch 进行捕获异常,但是还是会有异常关闭的情况,所以 ...
- windows程序意外关闭子订重启脚本
window程序意外关闭自动重启脚本实现 @echo off :1 tasklist|find /i "xxxx"||start yyyy ping/n 11 127.1> ...
- C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?
第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁.天哪,我可不是武断,算了.不要太绝对了.99.9%的人吧,都遇到过这个问 ...
- gtk+程序在关闭主窗口时的事件流
当鼠标单击gtk+窗口的关闭按钮时,程序首先接收到delete_event,当该事件处理函数返回TRUE表示事件已处理禁止进一步传播,从而取消关闭操作:当返回FALSE时,事件消息进一步向上传播,此时 ...
- 批处理--批量打开程序&批量关闭程序
批量打开程序 start D:\work\RunSvr01\IceFire88.01.exe start D:\work\RunSvr02\IceFire88.02.exe start D:\work ...
- 【LinuxC】GCC编译C程序,关闭随机基址
1.编译.链接和运行程序 C代码示例: #include <stdio.h> #include <stdlib.h> int main() { printf("hel ...
随机推荐
- DB2 alter 新增/删除/修改列
SQL语句 增加列.修改列.删除列 1 添加字段 语法 : alter table 表名称 add 字段名称 类型 demo: alter table tableName add columnName ...
- 《设计模式之美》 <03>面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?
面向对象 现在,主流的编程范式或者是编程风格有三种,它们分别是面向过程.面向对象和函数式编程.面向对象这种编程风格又是这其中最主流的.现在比较流行的编程语言大部分都是面向对象编程语言.大部分项目也都是 ...
- Mybatis 高级查询的小整理
高级查询的整理 // resutlType无法帮助我们自动的去完成映射,所以只有使用resultMap手动的进行映射 resultMap: type 结果集对应的数据类型 id 唯一标识,被引用的时候 ...
- Spark(一)wordcount
Spark(一)wordcount 一.新建一个scala项目 在maven中导入 <!-- https://mvnrepository.com/artifact/org.apache.spar ...
- Redis持久化(三)
Redis持久化 Redis提供了哪些持久化机制 1. RDB持久化: 该机制是指在指定的时间间隔内将内存中的数据集快照写入磁盘. 2. AOF持久化: 该机制 ...
- struts2之多文件上传与拦截器(8)
前台jsp <s:form action="uploadAction" enctype="multipart/form-data" method=&quo ...
- vs调试代码 提示 未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项。试图加载格式不正确的程序。
未能加载文件或程序集“Oracle.DataAccess”或它的某一个依赖项.试图加载格式不正确的程序. 1.调试-选项-项目和解决方案-web项目-勾选对网站和项目使用iis express 64 ...
- SecureFX中文目录乱码问题解决方案
1.点击菜单栏中Options 2.找到General下的Configuration Paths并点击 3.在我的电脑打开 右面视图Configuration data is stored in th ...
- 【Python之路】特别篇--基于领域驱动模型架构设计的京东用户管理后台
一.预备知识: 1.接口: - URL形式 - 数据类型 (Python中不存在) a.类中的方法可以写任意个,想要对类中的方法进行约束就可以使用接口: b.定义一个接口,接口中定义一个方法f1: c ...
- PHP mysqli_query() 函数
PHP mysqli_query() 函数 定义和用法 mysqli_query() 函数执行某个针对数据库的查询. mysqli_query(connection,query,resultmode) ...