多线程控制台应用程序何时退出?

7
class Program
{
    public static void Main(String[] args)
    {
        var c = new C();
        var thread = new Thread(new ThreadStart(c.F));
        thread.Start();
        Console.WriteLine("Exiting main, but the program won't quit yet...");
    }
}
class C
{
    public void F()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("Waiting {0}", i);
            Thread.Sleep(1000);
        }
        Console.WriteLine("Now the program will quit...");
    }
}

控制台应用程序在底层发生什么导致它等待其他线程完成才退出(文档指针可以)?

注意:我知道这是一个基本问题-我总是成功地等待线程完成,从未考虑过有一些基础设施为我完成它...


3
请参见 http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground.aspx 上关于 Thread.IsBackground 的注释。当所有前台线程终止时,进程也会结束。 - drch
@drch,那基本上就是答案了。为什么要评论呢? - MSN
@drch,在我发布这个帖子之前,我正在谷歌搜索,试图找到确切的内容...谢谢!(如果您将其放入其中,我会标记为答案) - Aaron Anodide
2个回答

11

当所有前台线程终止时,进程结束。

关于前台线程与后台线程,请参考Thread.IsBackground 备注:

线程分为前台线程和后台线程。除了不会阻止进程终止外,后台线程与前台线程相同。一旦属于进程的所有前台线程都终止,公共语言运行时就结束该进程。任何剩余的后台线程都将被停止并且无法完成。


-1
任何具有正在运行线程的进程都不会退出,直到所有线程都退出为止。 因此,当主线程退出时,它还有另一个线程在运行,当该线程退出时,进程将被终止。 要在任何时间点退出程序,可以使用 Environment.Exit(0);。 这个语句将终止所有线程并终止进程,虽然这种方式不够优雅。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接