【问题标题】:Who calls the Main() method in C# ? How to quit the application in case of exception in Main() method?谁调用 C# 中的 Main() 方法? Main() 方法出现异常时如何退出应用程序?
【发布时间】:2011-08-29 08:51:07
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# .net winforms exception-handling return


    【解决方案1】:

    谁调用了 Main() 方法?

    CLR

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

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

    【讨论】:

    • 感谢您的回复。我想,当您发布答案时,我正在编辑问题。顺便说一句,当我们启动应用程序时,是否有任何线程在后台/前台自动启动?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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 */);
          }
      }
      

      【讨论】:

      • 耶!在没有任何解释的情况下投反对票。很有帮助。
      • 如果能提供不赞成的理由会更好!
      • 是的,除非答案有明显问题,否则通过投票驱动并不酷。我不得不发出一个平衡的赞成票。
      【解决方案4】:

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

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

      【讨论】:

      • 但在 .NET 中它更复杂,因为程序集必须首先进行 JIT 处理。 CLR 实际上调用 Main 方法。
      【解决方案5】:

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

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

      【讨论】:

      • 哇 10 年的 c#,我不知道你可以更改方法签名
      猜你喜欢
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多