退出 .NET 应用程序的通用方法
Posted
技术标签:
【中文标题】退出 .NET 应用程序的通用方法【英文标题】:Generic way to exit a .NET application 【发布时间】:2011-06-12 17:56:58 【问题描述】:我了解有几种方法可以退出应用程序,例如 Application.Exit()、Application.ExitThread()、Environment.Exit() 等。
我有一个外部“commons”库,我正在尝试创建一个通用的 FailIf 方法,将失败记录到日志中,执行此操作,执行此操作,然后最终退出应用程序...这里有一个它的简短版本。
public static void FailIf(Boolean fail, String message, Int32 exitCode = 1)
if (String.IsNullOrEmpty(message))
throw new ArgumentNullException("message");
if (fail)
//Do whatever I need to do
//Currently Environment.Exit(exitCode)
Environment.Exit(exitCode);
我已经读到使用 Environment.Exit 并不是处理 WinForm 应用程序的最佳方式,而且在使用 WPF 应用程序和 Silverlight 时,有不同的退出方式......我的问题是:
如何优雅地退出以涵盖所有应用程序类型?
【问题讨论】:
你不能简单地抛出一个异常而不是做明显的断言吗? 【参考方案1】:阅读这篇文章,了解使用环境和应用程序之间的区别:
Application.Exit Vs Environment.Exit
该页面底部有一个您想要执行的操作的示例:
if (System.Windows.Forms.Application.MessageLoop)
// Use this since we are a WinForms app
System.Windows.Forms.Application.Exit();
else
// Use this since we are a console app
System.Environment.Exit(1);
【讨论】:
这是否也适用于 WPF 应用程序? WPF 应用程序通常使用 .Run() 命令启动(是)【参考方案2】:如果只是中止,请使用Environment.Exit()
。如果这是非常关键的事情(无法处理任何类型的清理),请使用Environment.FailFast()
。
【讨论】:
【参考方案3】:我建议使用基本的异常处理,所以不要 System.Environment.Exit(1) throw new ApplicationException(message) 将异常冒泡到 main 方法,在你的情况下是这样的:
try
Application.Run(new MyForm());
catch(ApplicationException)
// do custom cleanup/reporting
只要确保你从主线程抛出异常,否则在抛出之前调用它
【讨论】:
在我上次使用 winforms 之前的一段时间,所以不确定调用是否正确,但至少你明白了,也看看例外以上是关于退出 .NET 应用程序的通用方法的主要内容,如果未能解决你的问题,请参考以下文章
在 asp .net 核心中为 MediatR 库的发送和发布方法添加通用处理程序
克隆/深度复制 .NET 通用 Dictionary<string, T> 的最佳方法是啥?