这篇文章主要介绍了C#中WinForm程序退出方法,

实例总结了技巧退出WinForm程序窗口的各种常用技巧,非常具有实用价值,需要的朋友可以参考下

本文实例总结了C#中WinForm程序退出方法技巧。分享给大家供大家参考。具体分析如下:

在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0);

等他们各自的方法不一样,下面我们就来详细介绍一下。


1.this.Close();

只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;


2.Application.Exit();

强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;


3.Application.ExitThread();

强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;


4.System.Environment.Exit(0);

这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 强烈推荐 (我使用的就是这一个,在窗体关闭结束的事件里面调用该方法 如下面示例。之前出现的问题就是做聊天室的时候,客户端窗体关闭了但是套接字还存在因为线程没有全部关闭 所以出现服务器检测不到该用户关闭的问题 一些需要客户端进行操作的服务由于客户端的界面已经关闭也无法完成。之后只能使用心跳包完成连接的检测。当发送信息出错时在异常里面关闭掉对应的套接字,去除相关信息)


下面看一些实例

当我打开一个子窗体,进行某项操作时,如果字窗体中有循环操作时。如果运行中我关闭子窗体,发现窗体虽然关闭了,但子窗体中的循环程序却没有退出,一直在 执行,并占用着系统资源,直到循环结束,才真正的释放资源。尽管我在字窗体的Closed事件中写了如下代码:

复制代码代码如下:

private void frmFileDisposal_Closed(object sender, System.EventArgs e)
{
this.Dispose();
this.Close();
}

后来从查MSDN和从网上查资料才得知,Dispose()方法,虽然能释放当前窗体的资源,却不能强制结束循环,要想强制突出当前程序要用:System.Environment.Exit(int exitcode)方法;该方法:终止当前进程并为基础操作系统提供指定的退出代码。

如下则问题解决:

复制代码代码如下:

private void frmFileDisposal_Closed(object sender, System.EventArgs e)
{
System.Environment.Exit(System.Environment.ExitCode);
this.Dispose();
this.Close();
}

或者把它放到事件里:

复制代码代码如下:

while (MessageBox.Show("退出当前窗体?", "", MessageBoxButtons.YesNo)
== DialogResult.No)
{
for(int j=1; j<=i; j++)
{
listBox1.Items.Add(j);
}
}
System.Environment.Exit(System.Environment.ExitCode);

还有一种方法:

复制代码代码如下:

System.Threading.Thread.CurrentThread.Abort();

或者

复制代码代码如下:

Process.GetCurrentProcess().Kill()

或者

复制代码代码如下:

Application.ExitThread();

或者

复制代码代码如下:

Application.ExitThread()

不过以上方法,都是强制直接退出了整个程序,不只是关闭子窗体。可能还会引发某些问题。

我感觉最好方法的就是,在子窗体的Closing事件中,写循环退出条件,这样就可以避免某些未知的错误,而且可以只关闭子窗体,并释放子窗体占用的资源。

Application.Exit(); 方法停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。

Application.Exit 是一种强行退出方式,就像 Win32 的 PostQuitMessage()。它意味着放弃所有消息泵,展开调用堆栈,并将执行返回给系统。

希望本文所述对大家的C#程序设计有所帮助。

C# Winform退出程序的方法介绍的更多相关文章

  1. 【转】C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  2. C#中WinForm程序退出方法技巧总结(转)

    本文实例总结了C#中WinForm程序退出方法技巧.分享给大家供大家参考.具体分析如下: 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit ...

  3. C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  4. C#中WinForm程序退出方法技巧总结[转]

      这篇文章主要介绍了C#中WinForm程序退出方法,实例总结了技巧退出WinForm程序窗口的各种常用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例总结了C#中WinForm程序退出方法技 ...

  5. 【C# 开发技巧】 C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  6. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  7. fstream的使用方法介绍

    转载自:  fstream的使用方法介绍 - saga's blog - C++博客 http://www.cppblog.com/saga/archive/2007/06/19/26652.html ...

  8. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

  9. WebService服务调用方法介绍

    1 背景概述 由于在项目中需要多次调用webservice服务,本文主要总结了一下java调用WebService常见的6种方式,即:四种框架的五种调用方法以及使用AEAI ESB进行调用的方法. 2 ...

随机推荐

  1. indexDB出坑指南

    对于入了前端坑的同学,indexDB绝对是需要深入学习的. 本文针对indexDB的难点问题(事务和数据库升级)做了详细的讲解,而对于indexDB的特点和使用方法只简要的介绍了一下.如果你有一些使用 ...

  2. SQL SERVER 的窗体函数OVER的使用:row_number/rank/dense_rank

    举个例子给大家加深印象,也方便理解: 1.目前有这几笔数据: Select as score into #studentSoure union all Select as score union al ...

  3. java开发常见单词(复习整理)

    开发中基本都能碰到,不止以下单词,后续会添加,javascript.html.mysql.spring.Linux中常用单词于此合并分类,特殊不常见不添加 访问修饰符4个--------------- ...

  4. 爬取淘宝商品信息,放到html页面展示

    爬取淘宝商品信息 import pymysql import requests import re def getHTMLText(url): kv = {'cookie':'thw=cn; hng= ...

  5. vue 兄弟组件之间的传值

    一. 子传父,父传子. 二. 1.兄弟之间传递数据需要借助于事件车,通过事件车的方式传递数据 2.创建一个Vue的实例,让各个兄弟共用同一个事件机制. 3.传递数据方,通过一个事件触发bus.$emi ...

  6. Java创建线程的方式

    Java中线程的创建有四i种方式: 1.  通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中 2.  通过实现Runnable接口,实例化Thread类 3.应用程序 ...

  7. layui菜单点击刷新,自适应

    最近在项目上用layui框架后台iframe版,遇到的一些问题分享: 1.项目的左侧菜单点击对应的子菜单能自动刷新问题. 2.除了在左侧有菜单,还需要在右侧需要一个菜单(跳转到新页面),并且能够伸缩自 ...

  8. Mysql之Linux中mariadb主从复制

    master主机mysql安装配置 1.下载mariadb(Centos7开始mysql的名字) (1)其它方式(不推荐):rpm安装/软件源安装 (2)yum安装(推荐): ①centos官方的yu ...

  9. LightOJ1336

    题目大意: 给你一个 n ,求出 1 到 n 中有多少个数的因数和为偶数. 解题思路: 可以先求出因数和为奇数的数字的个数. 由算术基本定理我们可以得到:N=P1a1P2a2P3a3 … Pnan, ...

  10. 【idea】idea如何在maven工程中引入jar包

    在pom.xml文件中引入所有代码包后,项目右键--maven--reimport </dependencies>