【多线程-前台线程和后台线程】

来源:互联网 发布:音悦台点歌机加歌软件 编辑:程序博客网 时间:2024/05/29 09:37

一.前台和后台线程的区别:

所有前台线程执行完毕以后,应用程序的进程结束。而不论后台进程是否结束。

默认情况下新建的线程为前台线程,可以使用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;



0 0
原创粉丝点击