谁调用了 C# 中的 Main() 方法?如果 Main() 方法出现异常,如何退出应用程序?

发布于 2024-11-08 13:46:44 字数 519 浏览 0 评论 0原文

我在看其他问题,然后我有这个问题:

  1. 谁调用 Main() 方法?
  2. 如果我想退出/退出应用程序(当我在 Main() 方法本身中遇到一些异常时),使用 catch 中的 return; 语句是个好主意吗 Main() 方法中的块?

    • 请注意,我没有在 Main() 方法中显式启动任何线程。当我们启动应用程序时,是否有线程在后台自动启动?
    • Application.Exit() 不保证应用程序退出
    • 编辑点Environment.Exit() 是另一种选择。

使用return;语句退出应用程序是一个好主意吗?如果不是,那么哪些(微妙的)事情导致它可能不是一个好主意?

相比之下,哪种戒烟方法是最好的?

I was looking at some other question and then I had this question:

  1. Who calls the Main() method?
  2. If I want to exit/quit the application (when I get some exception in the Main() method itself), is it a good idea to use return; statement from the catch block in the Main() method?

    • Please note that I am not starting any thread in the Main() method explicitly. When we start the application, are there any threads start automatically in the background?
    • Application.Exit() does not guarantee an application to quit
    • (EDITED point) Environment.Exit() is another option.

Can use of return; statement to quit the application be a good idea? If no, what are those (subtle) things because of which it may not be good idea?

In comparison, which is the best approach to quit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

许久 2024-11-15 13:46:44

如果您的应用程序由于意外错误而终止,您可能希望使用环境.FailFast 它将使用指定的消息“崩溃”应用程序,该消息将写入事件日志,并为用户提供将崩溃数据提交给 Microsoft 的机会。作为开发人员,Microsoft 可以向您提供崩溃数据。

但是,如果您只想向调用进程返回错误条件(例如在控制台应用程序的情况下),您可以修改 Main 方法签名以返回 int,然后返回一个非零值,按照惯例这意味着错误健康)状况。

If your application is going to terminate due to an unexpected error, you may wish to use Environment.FailFast which will "crash" the application with a specified message that gets written to the event log and offers the user an opportunity to submit the crash data to Microsoft. As the developer, Microsoft can make the crash data available to you.

But if you just want to return an error condition to the calling process (such as in the case of a console application) you can modify your Main method signature to return an int and then return a non-zero value which by convention implies an error condition.

筱果果 2024-11-15 13:46:44

<块引用>

谁调用 Main() 方法?

CLR

<块引用>

如果我想退出/退出应用程序(当我在 Main() 方法本身中遇到一些异常时),使用 return; 是个好主意吗? Main() 方法中的 catch 块中的语句?

是的,但需要注意的是您没有其他前台线程。

Who calls the Main() method?

CLR

If I want to exit/quit the application (when I get some exception in the Main() method itself), is it a good idea to use return; statement from the catch block in the Main() method?

Yes, with the caveat that you don't have other foreground threads.

私野 2024-11-15 13:46:44

您可以在所有 Main() 周围放置一个巨大的 try/catch 块,或者设置 AppDomain.UnhandledException 事件。这不直接相关,但请查看 Environment.Exit,您对 Application.Exit 的看法是正确的,因为它所做的只是关闭所有窗口。如果您声明了 void Main() 而不是 int Main(),Environment.Exit 还允许您指定 0 以外的值作为退出状态(错误级别)。

You could put a giant try/catch block around all of Main(), or set up the AppDomain.UnhandledException event. This is not directly relevant, but look at Environment.Exit, you're right about Application.Exit since all it does is close all windows. Environment.Exit also allows you to specify a value other than 0 as the exit status (errorlevel) if you have declared void Main() instead of int Main().

最近可好 2024-11-15 13:46:44

Application.Exit() 适用于基于表单的应用程序。在 Main 中处理异常的最佳方法:

static void Main(string[] args) {
    try {
        // code here
    } catch {
        // do any clean up and return

        // optionally specify an exit code
        Environment.Exit(1 /* or any number other than zero since this is an error condition */);
    }
}

Application.Exit() is for Form based applications. The best way to handle an exception in Main:

static void Main(string[] args) {
    try {
        // code here
    } catch {
        // do any clean up and return

        // optionally specify an exit code
        Environment.Exit(1 /* or any number other than zero since this is an error condition */);
    }
}
赴月观长安 2024-11-15 13:46:44

1)操作系统基本上调用Main方法。它的起始地址是指定的.exe的PE头(如果我没记错的话)。

2) 是,使用 catch 块中的 return 语句。

1) The OS basically calls the Main method. It start address is specified PE header of the .exe (if I remember correctly).

2) Yes use the return statement from the catch block.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文