多线程控制台应用程序什么时候退出?

时间:2013-01-31 02:00:40

标签: c# multithreading

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...");
    }
}

在控制台应用程序的引擎下发生了什么导致它在退出之前等待另一个线程完成(指向文档很好)?

注意:我知道这是一个基本问题 - 我总是管理等待线程完成之前,从未考虑过有一些基础设施为我做了...

2 个答案:

答案 0 :(得分:9)

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

来自前景线程与背景线程的Thread.IsBackground备注:

  

线程是后台线程或前台线程。后台线程与前台线程相同,除了后台线程不会阻止进程终止。一旦属于进程的所有前台线程终止,公共语言运行库就结束该进程。任何剩余的后台线程都会停止并且不会完成。

答案 1 :(得分:-1)

任何具有正在运行的线程的进程都不会退出,直到退出所有线程。 所以当主线程退出时,它会运行另一个线程,并且当脚踏退出过程终止时。 在任何时候退出程序Environment.Exit(0);应该管用。 这个陈述将终止所有的步骤,并且这个过程将被终止,这是一种不合时宜的方式