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

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

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

4

2 回答 2

11

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

来自Thread.IsBackground对前台线程与后台线程的评论:

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

于 2013-01-31T02:20:25.067 回答
-1

任何有运行线程的进程都不会退出,直到所有线程都退出。因此,当主线程退出时,它会运行另一个线程,并且当线程退出时,进程会终止。随时退出程序 Environment.Exit(0); 应该管用。该语句将终止所有的线程并且进程将被终止,虽然这是不优雅的方式

于 2013-01-31T02:04:12.253 回答