博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)C#/.NET主线程与子线程之间的关系
阅读量:4659 次
发布时间:2019-06-09

本文共 1329 字,大约阅读时间需要 4 分钟。

     一般 一个应用程序就对应一个进程,一个进程可有一个或多个线程,而一般有一个主线程。

      有的博客上说“至少一个主线程”,这一说法持有怀疑
         主线程与子线程之间的关系
         **默认情况,在新开启一个子线程的时候,他是前台线程,只有,将线程的IsBackground属性设为true;他才是后台线程
         *当子线程是前台线程,则主线程结束并不影响其他线程的执行,只有所有前台线程都结束,程序结束
         *当子线程是后台线程,则主线程的结束,会导致子线程的强迫结束
            (个人理解,这样设计的原因:因为后台线程一般做的都是需要花费大量时间的工作,如果不这样设计,主线程已经结束,而后台工作线程还在继续,第一有可能使程序陷入死循环,第二主线程已经结束,后台线程即时执行完成也已经没有什么实际的意义)
         
         实例代码:
        static Thread Mainthread;  //静态变量,用来获取主线程
      static void Main(string[] args)
        {
           Mainthread= Thread.CurrentThread;//获取主线程
           Test1();
          }
 private static void Test1()
        {
            Console.WriteLine("在主进程中启动一个线程!");
            Thread firstChild = new Thread(new ParameterizedThreadStart(ThreadProc));//threadStart 是一个委托,代表一个类型的方法
            firstChild.Name = "线程1";
            firstChild.IsBackground = true;
            firstChild.Start(firstChild.Name);//启动线程
            Thread secondChild = new Thread(new ParameterizedThreadStart(ThreadProc));
            secondChild.Name = "线程2";
            secondChild.IsBackground = true;
            secondChild.Start(secondChild.Name);
            Console.WriteLine("主线程结束");
            Console.WriteLine(Mainthread.ThreadState);
            Mainthread.Abort();
        }
        private static void ThreadProc(object str)
        {
           
 
            for (int i = 0; i < 10; i++)
            {
               
                Console.WriteLine(Mainthread.ThreadState);
                Console.Write(str+"调用ThreadProc: " + i.ToString() + "\r\n");
                if (i == 9)
                    Console.WriteLine(str + "结束");
                Thread.Sleep(2000);//线程被阻塞的毫秒数。0表示应挂起此线程以使其他等待线程能够执行
            }
        }

转载于:https://www.cnblogs.com/candyzhmm/p/5674386.html

你可能感兴趣的文章
ssh自动分发密匙脚本样板
查看>>
转 小辉_Ray CORS(跨域资源共享)
查看>>
Linux安装postgresql
查看>>
MyBatis启动:MapperStatement创建
查看>>
【 全干货 】5 分钟带你看懂 Docker !
查看>>
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
lambda表达式树
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>
CSE 3100 Systems Programming
查看>>