我的基于GUI桌面的WPF 4.0(C#.NET4.0)程序可以与SQL Server数据库配合使用.每次我运行应用程序时,它都会通过ADO.NET实体框架创建到SQL Server的连接,如果无法访问SQL Server,它会抛出异常,并显示MessageBox并发出通知.

现在我希望在用户阅读此消息后,应用程序将关闭.我找到了三种方法:

Process.GetCurrentProcess().Kill();

this.Shutdown(); // Application.Current.Shutdown()

System.Environment.Exit(0);

All of them w或k fine and do what I need — close application and kill application's process in Windows Task Manager.

我想知道:

  1. 它们之间有什么不同?
  2. 哪种方式可以更快地关闭我的应用程序?
  3. 我应该使用哪种方式关闭应用程序?
  4. Application.Current.Shutdown()this.Shutdown()是关闭应用程序的相同方式吗?

Or maybe there is another, m或e suitable, way to close a WPF GUI application?

Application.Exit() doesn't w或k f或 me as I get the err或:

The event 'System.Windows.Application.Exit' can only appear on the left-hand side of += 或 -=

谢谢

推荐答案

Application.Current.Shutdown()是关闭应用程序的正确方法.一般来说,因为你可以处理more个退出事件

当您想要终止应用程序时,应该使用Process.GetCurrentProcess().Kill().more

Ad1.这些方法的性质完全不同.关闭过程可以暂停以结束某些操作,并强制关闭应用程序.

AD2.Kill()可能是最快的方式,但这有点像内核panic .

AD3.关闭,因为它会触发Close事件

广告4.这取决于this是多少.

Database相关问答推荐

将数据拆分为月份(以Postgres为单位

为什么 INNER JOIN 不等于(!=)永远挂起

多列索引的顺序

使用 Java 对 mysql 数据库进行简单备份和恢复

如何避免使用 LINQ-To-SQL 的内存泄漏?

如何在 Oracle 中找到指向一条记录的外键依赖项?

如何在构建时创建填充的 MySQL Docker 映像

MySQL JDBC Driver中cachePrepStmts和useServerPrepStmts有什么区别

使用 Flask 时 Python 中持久数据库连接的最佳实践

从 activerecord 获取索引哈希

PHP 和 MySQL Select 单个值

数以百万计的条目排名

将用户数据存储在 LDAP 而不是 RDBMS 中的原因

MySQL中的eq_ref和ref类型是什么意思解释

Python中准备好的语句和参数化查询之间的混淆

Django + PostgreSQL:如何重置主键?

根据上次日期 Select 记录

使用 PHP/MySQL 导入 CSV 数据

如何判断我的 heroku 数据库的记录?

Cassandra - 事务支持