谁在C#中调用Main()方法?如何在Main()方法中出现异常时退出应用程序?

时间:2011-05-20 04:02:55

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

我正在寻找其他问题然后我有了这个问题:

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

    • 请注意,我没有明确地在Main()方法中启动任何线程。当我们启动应用程序时,是否有任何线程在后台自动启动?
    • Application.Exit()不保证申请退出
    • EDITED point Environment.Exit()是另一种选择。
  3. 可以使用return;语句退出应用程序是一个好主意吗?如果不是,那些(微妙)的东西是什么,因为它可能不是一个好主意?

    相比之下,退出的最佳方法是什么?

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  
    

谁调用Main()方法?

  

CLR

  
    

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

  

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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 :(得分:0)

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

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