以下是退出应用程序的方法:

  1. Environment.Exit(0)
  2. Application.Exit()
  3. Form.Close()

这三种方法之间的区别是什么?何时使用每种方法?

推荐答案

正确的方法是Application.Exit().根据Documentation,它会终止所有消息循环并关闭所有窗口,从而使窗体有可能执行清理代码(如Form.OnClose等).

Environment.Exit只会扼杀整个过程.如果某个表单有未保存的更改,它将没有机会询问用户是否要保存这些更改.此外,资源(数据库连接等)无法正确释放,文件可能无法刷新等.

Form.Close只是按照它说的做:它关闭一个表单.如果您打开了其他表单(可能不是现在,而是在应用程序的future 版本中),应用程序将不会终止.

请记住,如果您使用多线程,Application.Exit()将不会终止您的线程(因此,即使GUI终止,应用程序也将继续在后台工作).因此,您必须采取措施在Main函数(即Program.Main())中或在Main窗体的OnClose事件中终止线程.

.net相关问答推荐

.NET模拟具有泛型返回类型的方法

使用 PostAsJsonAsync C# 时出现错误请求

如何在 FtpWebRequest 之前判断 FTP 上是否存在文件

如何使用 Moq 为不同的参数设置两次方法

SqlDateTime.MinValue != DateTime.MinValue,为什么?

C# 的部分类是糟糕的设计吗?

静态代码块

如何从字符串中删除所有字母字符?

如何判断对象是否是某种类型的数组?

如何制作通用类型转换函数

如何将 System.Type 转换为其可为空的版本?

ReaderWriterLockSlim 什么时候比简单的锁更好?

将记录器作为单身人士是一个好习惯吗?

将日期时间转换为时间跨度

如何以编程方式删除 WebClient 中的 2 个连接限制

如何修复 .NET Windows 应用程序在启动时崩溃并出现异常代码:0xE0434352?

如何在 Dapper.Net 中编写一对多查询?

任何人都知道缺少枚举通用约束的好方法吗?

作者主签名的时间戳发现了一个建链问题:UntrustedRoot: self-signed certificate in certificate chain

如何将两个 List 相互比较?