一.前台和后台线程的区别:
所有前台线程执行完毕以后,应用程序的进程结束。而不论后台进程是否结束。
默认情况下新建的线程为前台线程,可以使用Thread.IsBackground属性查看
// // 摘要: // 获取或设置一个值,该值指示某个线程是否为后台线程。 // // 返回结果: // 如果此线程是后台线程或即将成为后台线程,则为 true;否则为 false。 // // 异常: // System.Threading.ThreadStateException: // 线程已死。 public bool IsBackground { get; set; }
二.所有前台线程结束,后台线程即使没有结束,该进程也会结束:
class Program { private static Thread subthread ; static void Main(string[] args) { Thread.CurrentThread.Name = "Main线程"; Console.WriteLine("{0}后台线程",Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground);// 如果此线程是后台线程或即将成为后台线程,则为 true;否则为 false。 subthread = new Thread(new ThreadStart(GetShow)); //无参数的入口方法线程 subthread.Name = "无参数的入口方法线程"; subthread.IsBackground = true; //设置为后台进程 subthread.Start(); //开启线程 Thread.Sleep(2000); Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground+",结束"); } static void GetShow() { Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground); try { Console.WriteLine("休息4秒"); Thread.Sleep(4000); } catch (Exception ex) { Console.WriteLine("线程被唤醒,只休息了5秒"); Console.WriteLine(ex.Message); } Console.WriteLine("{0}后台线程", Thread.CurrentThread.Name+Thread.CurrentThread.IsBackground + ",结束"); } }
三. 当所有的前台线程结束后,进程才能结束:
即:注释上面的代码: //subthread.IsBackground = true;