相同点:
前台线程和后台线程,都是 Tread 创建的
区别:
后台线程设置了 IsBackground = true;(默认创建的都是 前台线程)
- 前台线程:会阻止应用程序退出,直到线程完成任务(主线程结束后,还会等待线程结束才退出)。如果必须等待线程完成才退出的,如退出程序时保存数据时,可以使用前台线程
- 后台线程:不会阻止应用程序退出,应用程序退出时后台线程会被强制终止(主线程结束后,即使后台线程还没结束,程序也会退出)。如果对线程是否完成没有硬性要求,所做的内容也可以丢失,这时可以使用后台线程
例子:
public static void test_background_thread(Boolean isBackground)
{
Thread foregroundThread = new Thread(() =>
{
Console.WriteLine("前台线程开始运行");
Thread.Sleep(5000); // 模拟耗时操作
Console.WriteLine("前台线程结束运行");//如果设置为后台线程后,这里可能不会执行(如果主线程结束,则不会执行)
});
foregroundThread.IsBackground = isBackground;//设置为后台线程
foregroundThread.Start();
Console.WriteLine("主线程结束");
// 即使主线程结束,前台线程仍会继续运行,直到完成
}
test_background_thread(false);
输出结果:
主线程结束
前台线程开始运行
前台线程结束运行
test_background_thread(true);
输出结果:
主线程结束
前台线程开始运行