c#可执行控制台应用程序的生命周期(如果有)是什么?

时间:2012-04-24 07:12:12

标签: c# console-application

我很想知道C#控制台应用程序是否存在任何生命周期,类似于ASP.Net生命周期。

我对

特别感兴趣
  • 装配解决方案 - 何时发生
  • 编译 - static Main方法如何影响依赖对象的编译

1 个答案:

答案 0 :(得分:6)

通常,每个方法在首次执行时都是JITted,并且根据需要再次发生程序集解析,通常表示“在使用我们尚未需要的程序集的方法的JIT期间“(但也可以意味着:通过反思)。

static Main的工作方式与其他方法相同;您在Main中使用的任何内容都将在Main开始执行之前得到解决。在某些情况下,您可能需要(以帮助调试):

static int Main(string[] args) {
    try {
        return MainImpl(args);
    } catch(Exception ex) {
        // .. do something
        return -1;
    }
}
[MethodImpl(MethodImplOptions.NoInlining)]
static int MainImpl(string[] args) { ... }

如果通常位于Main(但现在位于MainImpl)的代码导致程序集解析错误,那么这很有用...因为你不能catchMain的内容Main如果Main无法首先成功进行JIT成功。

至于生命周期...

  • 入口点已开始(Main
  • 当没有非后台线程存活时,应用程序退出;对于典型的线性控制台exe,这意味着“当{{1}}退出时”,但在线程服务器示例中可能更复杂
    • 或者可以从内部或外部提前终止