2011-05-20 26 views
3

我一直在寻找一些其他的问题,然后我有这样一个问题:谁叫在C#中的main()方法? Main()方法中的异常情况下如何退出应用程序?

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

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

可以使用return;声明退出该应用程序是一个好主意?如果不是,那些(微妙的)事情是什么,因为它可能不是个好主意?

相比较而言,这是戒烟最好的方法?

回答

2

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

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

+2

哇10年的C#,我不知道你可以改变方法签名 – 2011-05-20 04:37:41

1

谁调用Main()方法?

CLR

如果我想退出/退出应用程序(当我得到一些例外,在main()方法本身),是使用回一个好主意; Main()方法中catch块的语句?

是的,要注意的是,您没有其他前景线程。

+0

感谢您的回复。我想,当你发布答案时,我正在编辑这个问题。顺便说一句,当我们启动应用程序时,是否有任何线程在后台/ forground中自动启动? – Learner 2011-05-20 04:18:18

1

你可以把周围的所有主要(巨人try/catch块),或设置AppDomain.UnhandledException事件。这是没有直接关系,但看Environment.Exit,你因为它是所有关闭所有的窗口说得对Application.Exit。 Environment.Exit还允许你指定,如果你已经声明void Main()而不是int Main()退出状态(错误级别)0以外的值。

1

Application.Exit()是基于表单的应用程序。在主要的最佳方式来处理异常:

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

耶!一个downvote没有任何解释为什么。很有帮助。 – 2011-05-20 04:26:04

+0

如果提供降低投票的理由,则更好! – Learner 2011-05-20 04:30:02

+0

是的,如果答案没有明显的问题,那么通过downvote开车并不酷。我不得不发出一个平衡upvote。 – Josh 2011-05-20 04:32:40

0

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

2)是使用来自catchreturn声明。

+1

但是在.NET中它比较复杂,因为程序集必须先进行JIT处理。 CLR实际上调用Main方法。 – Josh 2011-05-25 00:52:31

相关问题