参考资料:http://hi.baidu.com/liusc/blog/item/df822f290206cef498250afe.html

设置线程的IsBackground属性为True

关于Thread.IsBackground 的一点说明
2009年09月28日 星期一 23:34

.net 提供了Thread类用于线程的操作。

当初始化一个线程,把Thread.IsBackground=true的时候,指示该线程为后台线程。后台线程将会随着主线程的推出而退出。后台线程不妨碍程序的终止,只要所有前台线程都终止后,CLR就会对每一个活在的后台线程调用Abort()来彻底终止应用程序。

【注意】当在主线程中创建了一个线程,那么该线程的IsBackground默认是设置为FALSE的。也就是说,当主线程推出的时候,IsBackground=FALSE的线程还会继续执行下去,知道线程执行结束。只有IsBackground=TRUE的线程才会顺着主线程的推出而退出。

static void Main(string[] args)
{        
     Thread[] trd=new Thread[2];
            for (int i = 0; i < 2; i++)
            {
                trd[i]=new Thread(new ThreadStart(ThreadA));
                //trd.Start();
                //trd[i].IsBackground = true;
            }
            Console.WriteLine("\n\t!! 2 mmmm!!");
            trd[0].IsBackground = true;

trd[0].Start();
            trd[1].Start();
            //trd[1].Join();
            //trd[0].Join();
     return;
}

public static void ThreadA()
        {
            int i = 0;
            Console.WriteLine("id: "+Thread.CurrentThread.ManagedThreadId);
            for (; i < 10000; i++)
            {
                Console.Write("A");
                if (i > 200)
                {
                    Console.WriteLine(i);
                    return;
                }
            }
            Console.WriteLine(i);
            
        }

执行上面的例子可以知道,当主线程显示退出的时候,只要那些IsBackground=TRUE的线程随着主线程一起退出了,而那些IsBackground=FALSE还是需要等到自己执行完成完了之后才会退出。

当主线程不显示推出的时候,结果更是奇怪,就是代码执行到最后,主线程应该算是可以退出了。但是这时候IsBackground=FALSE的线程也不退出。也是要等到执行完成后才退出。

可见,.net中的线程应该是尽量保证所有线程都执行完了后才让整个程序退出。具体是个什么个规则就该去问微软了啊!!

转载于:https://www.cnblogs.com/dabaopku/archive/2011/12/16/2289613.html

C# 关闭主窗口后让所有线程都停止工作相关推荐

  1. pyqt5如何在关闭主窗口时,关闭所有的其余的窗口

    在PyQt5中,你可以通过覆盖QMainWindow或QWidget的closeEvent()方法,来处理关闭窗口时的事件.你可以在该方法中通过遍历应用程序中所有的窗口,并将它们关闭来实现关闭所有其余 ...

  2. office2010:打开和关闭Word文档提示“Microsoft Word已停止工作”的解决办法

    最近下了个Word文档,用Word2010打开,点一下"启用编辑"后显示"Microsoft Word已停止工作",然后就自动重启了.而且编辑过程中经常无缘无故 ...

  3. Appcan关闭主窗口

    1-uescript('zhuce','appcan.window.close(-1)') 2-js /*** 在其他窗口中执行指定主窗口中的代码* @param String wn 需要执行代码窗口 ...

  4. plsql强制关闭后再打开提示已停止工作的解决办法

    昨天下班时强制关闭了plsql,早晨过来打开就提示已停止工作,最后无奈备份了配置文件重装,但是问题没能解决,依然提示停止工作.百度也没有找到有用的信息,在这里记录一下,方便遇到同样问题的朋友. 解决办 ...

  5. Windows程序奔溃后,禁止弹出“停止工作”对话框

    在Win7及以后的系统中,如果一个程序发生了奔溃,系统会弹出一个"XX已停止工作"的对话框,如果不去这个窗口上点击"关闭程序",那么这个窗口会一直存在,最为关键 ...

  6. win7远程桌面怎么关闭计算机,Win7旗舰版系统远程桌面停止工作

    win7系统中一项强大的功能就是远程桌面,可以方便用户远程操作其他的计算机,但是有win7旗舰版系统用户却遇到了开启远程桌面的时候提示停止工作,导致远程桌面无法连接的问题,这该怎么办?现在就给大家讲讲 ...

  7. Windows 7 打开PDF文件后提示 Adobe Reader 已停止工作问题

    Windows 7  打开PDF文件后提示Adobe Reader XI (Adobe Reader 11.0.0) 已停止工作问题分享一下 打开PDF一会后提示以下信息 试过卸载,重安装,反复搞了几 ...

  8. 关闭主窗口,启动另一个窗口

    //按钮启动第二个窗口 private void button1_Click(object sender, EventArgs e) {//另起一个线程启动第二个窗口 new Thread(showF ...

  9. python tkinter 窗口关闭_用python中的tkinter从顶层窗口关闭主窗口

    这是我的第一个问题,我是python和这个网站的新手.在 我正在设计一个与数据库交互的应用程序.我添加了一个"关闭"按钮,我想打开一个新窗口,询问"关闭程序?" ...

最新文章

  1. 什么是视觉Visual SLAM
  2. cassandra hbase_为什么选择Cassandra
  3. Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds...
  4. python PyQt5中文教程☞【第一节】PyQt5简介
  5. 【首发】徐亦达团队新论文推荐:模限界矩阵分解
  6. Linux centosVMware zip压缩工具、tar打包、打包并压缩
  7. mysql安装check requirements出错_超详细的MySQL8.0.17版本安装教程
  8. Python 中三大框架各自的应用场景
  9. 浅谈iptables防SYN Flood攻击和CC攻击
  10. (11)Zynq SPI控制器介绍
  11. NO.47 确定项目要完成的需求列表
  12. source insight工程的相对路径
  13. (13)数据结构-先序中序还原二叉树
  14. 汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码
  15. 手机号码格式和邮箱格式校正
  16. Rabbitmq Ambiguous payload parameter for public xxx
  17. selenium click点击无反应问题
  18. Centos7 更改Apache默认网站目录
  19. macOS 11+ Big Sur SIP 禁用部分项方法
  20. Python-PyYAML

热门文章

  1. springboot项目中mybatis实现数据的基本查询
  2. Flutter Trying to embed a platform view but the PrerollContext does not support embedding
  3. Java中对数组的排序方法总汇分析
  4. Vue 左右翻页,点赞动画
  5. Supervisor-类unix系统下的进程控制工具
  6. python使用suds来调用webservice
  7. 收集数据至泛型Dictionary
  8. Suse系统用户不能登录报错
  9. Spring Framework--SpringMVC(1)--DispatcherServlet
  10. IE下img多余5像素空白