Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 退出.NET应用程序的一般方法_C#_Wpf_Winforms_Console Application_Exit - Fatal编程技术网

C# 退出.NET应用程序的一般方法

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)

我知道有几种方法可以退出应用程序,例如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时,有不同的退出方式。。。我的问题是:


为了涵盖所有应用程序类型,我应该如何优雅地退出?

阅读以下内容,了解使用环境和应用程序之间的区别:

在该页面底部有一个示例,说明了您想要做什么:

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之前的一段时间,我不确定这些调用是否正确,但你至少明白了这一点,还可以看看例外情况