什么时候应该使用Environment.Exit来终止控制台应用程序?

时间:2009-03-28 06:07:18

标签: c# .net console-application

我正在维护一些控制台应用程序,我在其中一些人注意到的一件事就是他们调用了Environment.Exit(0)。

示例程序如下所示:

public class Program
{
    public static void Main(string[] args)
    {
        DoStuff();
        Environment.Exit(0);
    }
}

我不明白原始程序员的意图是什么?在我看来,即使没有Environment.Exit语句,程序应该退出就好了。也就是说,对于其中一个程序,它的控制台窗口即使在应该关闭之后仍然存在,所以我真的不确定那里发生了什么....

我在这里遗漏了什么吗?或者是否有理由在此实例中调用Environment.Exit?

7 个答案:

答案 0 :(得分:53)

Exit()作为Main方法的最后一行调用的唯一原因是,是否可能有其他前台线程在运行。如果执行刚刚从Main结束,它们将继续运行。即使在这种情况下,通常更好的做法是将一些明确的优雅终止放入其他线程 - 或者让它们以后台线程开始。

如果您想要从Main返回不同的退出代码,更简单的方法是将其声明为返回int

简而言之,我认为你不需要Environment.Exit(),并且值得向你的同事询问他们为什么使用它 - 他们很可能无法给你一个充分的理由,这是你可以削减的另一点点。

答案 1 :(得分:15)

基本上,语句Environment.Exit(0)告诉操作系统这是一个“干净”的退出。还有其他数字,每个数字都有不同的含义,如Environment.Exit(1)

然而有一点需要注意的是,“Main”已被声明为不返回“void”,因此退出代码对它没有任何意义。

如果您想了解更多有关不同退出代码的信息,请点击此处

system Error Codes

答案 2 :(得分:3)

这是命令行程序的[兼容性],用于指示底层shell的成功或失败,并且是从旧的C风格主循环继承的,其中主要函数的原型是

int main(void);

int main(int argc, char *argv[]);

0的返回值传统意味着成功,而非零意味着失败或其他东西,取决于程序员的决定。

参考

wiki了解有关main功能的更多信息。

Environment.Exit()

上的

MSDN documenttion

  

Environment.Exit():终止此过程并给出   底层操作系统   指定的退出代码。

答案 3 :(得分:0)

当其他应用程序等待您的控制台应用程序的结果时,会真正使用它。例如,SSRS(工具)可以启动控制台应用程序,并等待恢复成功的失败响应。 Environment.Exit(0)发回成功的执行消息。

答案 4 :(得分:0)

在SSIS中,如果您有执行流程任务并且想知道流程是否失败,则此方法很有用。

答案 5 :(得分:0)

到目前为止,在.net核心中,人们必须使用Environment.Exit来终止Mac上的程序。从main纯粹返回并不会停止该过程,它一直在运行,直到用户中止它为止。像这样的模式:

public class Program
{
    public static void Main(string[] args)
    {
        Environment.Exit(TryRun(args));
    }
}

在我的工作场所很常见,因为我们希望同时在Windows和Mac上发布。

答案 6 :(得分:0)

我目前正在控制台应用程序中使用=IFERROR(IFERROR(IF(MATCH(A24,'Sales Orders'!A:A,0),"On Pick",),IF(MATCH(A24,'Stock Reqs'!A:A,0),"On Pick",)),"") ,我不想在控制台应用程序中添加难看的异常文本。相反,我只是注意到情况,在屏幕上向用户写一条关于发生了什么的友好消息,然后调用Environment.Exit()

否则,您不需要在基本控制台应用程序中从Environment.Exit()调用它。