C#中的后台线程

use*_*973 6 .net c# multithreading

我是C#的新手.我了解到通常所有线程都是前景,除非你使用IsBackGround = true 明确地将它指定为"后台"线程.

一些疑惑突然出现在我的脑海里.

1)将线程保留为后台线程有什么好处?

2)执行以下代码时:

    static void Main(string[] args)
    {
        Thread worker = new Thread(SayHello);
        worker.IsBackground = true;
        worker.Start();
        Console.WriteLine("Hello From Main");
    }

    static void SayHello()
    {
        Console.WriteLine("Hello World");
        Console.ReadKey(true);
    } 
Run Code Online (Sandbox Code Playgroud)

我需要使用worker.Join()来保持主线程等待程序立即终止.除了Join()我可以使用其他技术来保持主线程等待吗?

cod*_*nix 11

1)将线程保留为后台线程有什么好处?

优点是后台线程不会阻止程序终止.在大型应用程序中,如果要退出应用程序,则可能有点难以停用所有线程.

除了Join()我可以使用其他技术来保持主线程等待吗?

如果你想让主程序等待为什么你首先使线程成为后台线程然后??? 除了Join()之外,您还可以使用EventWaitHandle或Monitor来使主方法等待.


Spe*_*nce 6

这意味着该线程是否会使进程保持活动状态.如果进程中的所有线程都标记为后台,那么.Net将关闭您的进程并强制它退出.

在回答你的问题时,是的你必须加入,因为后台的线程不会保持活着,因此当启动线程离开Main()时它将允许应用程序退出.