C#中的后台线程

我是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); } 

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

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

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

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

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

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

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

如果线程应该在程序终止之前完成,那么它不应该是后台线程。

有很多方法可以使你的主线程等待,但在上面的例子中,我认为你真正想要做的是确保它不是后台线程。

Join方法通常用于确保线程在调用线程继续之前完成执行。 例如,您可以生成5个线程,每个线程执行一些数学运算,并且可能需要这些操作的结果才能继续下一步。 Join方法将在调用线程上暂停执行,直到生成的线程完成。 重要的是要注意,如果从UI线程调用Join,您将冻结程序,直到生成的线程完成。

简而言之,multithreading非常复杂且细致入微。 我强烈推荐购买一本关于这个主题的好书。