程序的关闭是很讲究的,处理的不好的话,将软件连续开启和关闭,当数次后在启动软件后程序会崩溃。或者程序退出很慢。细节决定成败,一款好的软件应该从各方面都要做严格地反复地推敲,力争做到无可挑剔。
    有的程序员喜欢在关闭的时候让程序做一些事情,比如保存一些记录什么的,我觉得这样大可不必,因为这些会影响退出的时间,单一职责原则一再强调职责要单一,关闭程序就是关闭程序,不要掺杂其它动作。
    当然仅仅一个关闭也有很多种方式的,比如窗体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# 程序的关闭 讲究解释的更多相关文章

  1. 应用程序的关闭退出(在FMX中,Activity替代了Form的概念)

    在VCL中,关闭程序的主窗体也就意味着程序的主循环结束,主程序自然而然结束.所以在主窗体中使用窗体的关闭函数(Close)即可,如下: procedure TfrmMain.btncloseClick ...

  2. android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

    如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...

  3. 以&运行在后台的程序,关闭terminal后,相应进进程自动关闭

    以&运行在后台的程序,关闭terminal后,相应进进程自动关闭

  4. C# 程序异常关闭时的捕获

    本文主要以一个简单的小例子,描述C# Winform程序异常关闭时,如何进行捕获,并记录日志. 概述 有时在界面的事件中,明明有try... catch 进行捕获异常,但是还是会有异常关闭的情况,所以 ...

  5. windows程序意外关闭子订重启脚本

    window程序意外关闭自动重启脚本实现   @echo off :1 tasklist|find /i "xxxx"||start yyyy ping/n 11 127.1> ...

  6. C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?

    第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁.天哪,我可不是武断,算了.不要太绝对了.99.9%的人吧,都遇到过这个问 ...

  7. gtk+程序在关闭主窗口时的事件流

    当鼠标单击gtk+窗口的关闭按钮时,程序首先接收到delete_event,当该事件处理函数返回TRUE表示事件已处理禁止进一步传播,从而取消关闭操作:当返回FALSE时,事件消息进一步向上传播,此时 ...

  8. 批处理--批量打开程序&批量关闭程序

    批量打开程序 start D:\work\RunSvr01\IceFire88.01.exe start D:\work\RunSvr02\IceFire88.02.exe start D:\work ...

  9. 【LinuxC】GCC编译C程序,关闭随机基址

    1.编译.链接和运行程序 C代码示例: #include <stdio.h> #include <stdlib.h> int main() { printf("hel ...

随机推荐

  1. mmap:内存映射文件

    介绍 建立一个文件的内存映射将使用操作系统虚拟内存来直接访问文件系统上的数据,而不是使用常规的I/O函数访问数据. 内存映射通常可以提高I/O性能,因为使用内存映射时,不需要对每一个访问都建立一个单独 ...

  2. Windows下Pycharm安装Tensorflow:ERROR: Could not find a version that satisfies the requirement tensorflow

    今天在Windows下通过Pycharm安装Tensorflow时遇到两个问题: 使用pip安装其实原理都相同,只不过Pycharm是图形化的过程! 1.由于使用国外源总是导致Timeout 解决方法 ...

  3. vi和vim的使用

    本章内容: vi编辑器简介 vim基本使用 vim使用技巧 一.vim简介 vim是一个全屏幕纯文本编辑器,是vi编辑器的增强版. 二.vim的基本使用 1.vim的工作模式 命令模式:是主要使用快键 ...

  4. mysql 数据库常见的一些基本操作 !详不详细你说了算!

    在日常应用中可能一时想不起来,所以有必要整理一份 指令相关的笔记,以是个人比较满意,也比较全面的一份笔记,希望能帮到你,适用初级小白,大神可略过! MYSQL常用命令: 数据备份与还原·注意:不要打分 ...

  5. 剖析ajax

    学过javascript和接触过后端PHP语言必然要用到ajax,这是必学的一门学科,AJAX指的是Asynchronous JavaScript and XML,它使用XMLHttpRequest对 ...

  6. AtCoder Beginner Contest 132 F Small Products

    Small Products 思路: 整除分块+dp 打表发现,按整除分块后转移方向如下图所示,上面的块的前缀转移到下面的块 代码: #pragma GCC optimize(2) #pragma G ...

  7. pip安装tesserocr时报错

    在Xubuntu上的python2虚拟环境中, 使用pip安装tesserocr时报错error: command 'x86_64-linux-gnu-gcc' failed with exit st ...

  8. js动画fireworks烟花

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. 01windows7下安装rabbitmq

     1.直接双击rabbitmq-server-3.6.10.exe,会提示你缺少Erlang安装包,问你是否下载,点击是就可以了,因为我自己下载,我就直接先安装otp_win64_20.0.exe,直 ...

  10. Codeforces Round #590 (Div. 3) A. Equalize Prices Again

    链接: https://codeforces.com/contest/1234/problem/A 题意: You are both a shop keeper and a shop assistan ...