C# 退出.NET应用程序的一般方法
我知道有几种方法可以退出应用程序,例如application.exit()、application.ExitThread()、Environment.exit()等 我有一个外部的“commons”库,我正在尝试创建一个通用的FailIf方法,该方法将故障记录到日志中,这样那样做,这样那样做,最后退出应用程序。。。这里有一个简短的版本C# 退出.NET应用程序的一般方法,c#,wpf,winforms,console-application,exit,C#,Wpf,Winforms,Console Application,Exit,我知道有几种方法可以退出应用程序,例如application.exit()、application.ExitThread()、Environment.exit()等 我有一个外部的“commons”库,我正在尝试创建一个通用的FailIf方法,该方法将故障记录到日志中,这样那样做,这样那样做,最后退出应用程序。。。这里有一个简短的版本 public static void FailIf(Boolean fail, String message, Int32 exitCode = 1)
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时,有不同的退出方式。。。我的问题是:
为了涵盖所有应用程序类型,我应该如何优雅地退出?阅读以下内容,了解使用环境和应用程序之间的区别: 在该页面底部有一个示例,说明了您想要做什么:
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);
}
我建议使用基本的异常处理,而不是System.Environment.Exit(1)抛出新的ApplicationException(message),它会将异常冒泡到主方法,在您的情况下是这样的:
try{
Application.Run(new MyForm());
}
catch(ApplicationException){
// do custom cleanup/reporting
}
只要确保您从主线程抛出异常,否则在抛出异常之前调用它当然如果它只是一个中止,请使用
Environment.Exit()
。如果它是非常关键的(无法处理任何类型的清理),请使用Environment.FailFast()
难道你不能简单地抛出一个异常,而不是执行明显的断言吗?这是否也说明了WPF应用程序的问题?WPF应用程序通常是通过.Run()命令启动的(是)在我上次使用winforms之前的一段时间,我不确定这些调用是否正确,但你至少明白了这一点,还可以看看例外情况