注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一车,一房,一个温暖家

10万左右的车,80平方的房子,这是我奋斗的暖暖的家

 
 
 

日志

 
 

引用 前台线程和后台线程的区别   

2015-03-31 18:29:29|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文转载自恋上你的床《前台线程和后台线程的区别》
前台线程能阻止应用程序的终结,一直到所有的前台线程终止后,CLR才能关闭应用程序。后台线程又叫守护线程,它被CLR认为是程序执行中可做出牺牲的途 径,即在任何时候都可能被忽略,因此,如果所有的前台线程终止,当应用程序域卸载时,所有的后台线程也会被自动终止。值得注意的是:前台线程和后台线程并 不等同于主线程和工作线程,默认情况下,通过Thread.Start()方法创建的线程都自动成为前台线程。把线程的IsBackground属性设为 true就可以将线程配置为后台线程。

只有当所有的前台线程全部执行完毕后,应用程序才能够退出。而对于后台线程,当应用程序退出的时候,后台线程会被强制终止

多线程开发--前台与后台线程

     最 近在开发一个多线程程序,其中有使用Control.Invoke(Delegate method)方法调用一个委托来操作主线程上的控件。但在关闭程序时,有时会出现System.InvalidOperationException异 常,异常消息是"Invoke or BeginInvoke cannot be called on a control until the window handle has been created". 出现这个问题的原因是Invoke方法需要使用Control所在的主线程来调用参数中的委托, 但此时的主线程已经结束,执行Invoke方法的这个线程却还在运行,所以要解决这个问题,就需要在主线程结束之前,要其它关联的线程要全部关闭。
    在经过疯狂Google一阵后,终于找到一个解决办法,就是把主线程设为后台线程:  Thread.CurrentThread.IsBackground = true; MSDN中对前后台线程的解释是: 一个线程或者是后台线程或者是前台线程。后台线程与前台线程类似,区别是后台线程不会防止进程终止。属于某个进程的所有前台线程都终止后,公共语言运行库就会结束该进程。所有剩余的后台线程都会停止且不会完成。通过IsBackground属性可以改变其设置。
    所以当我们把主线程设为后台线程时,主线程要在所有其它线程关闭后才结束,它也就不会比执行Invoke方法的那个线程先结束,所以Invoke方法也就不会执行失败了。
 
PS, 更多参考:
ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_fxadvance/html/cfe0d632-dd35-47e0-91ad-f742a444005e.htm
托管线程或者是后台线程,或者是前台线程。后台线程不会使托管执行环境处于运行状态,除此之外,后台线程与前台线程是一样的。一旦所有前台线程在托管进程(其中 .exe 文件是托管程序集)中被停止,系统将停止所有后台线程并关闭。
注意
当运行库因为进程关闭而停止某个后台线程时,不会在该线程中引发异常。但是,当线 程是因为 System.AppDomain.Unload(System.AppDomain) 方法卸载应用程序域而停止时,将同时在后台和前台线程中引发 ThreadAbortException。
 
请使用 Thread.IsBackground 属性确定线程是后台线程还是前台线程,或更改其状态。通过将其 IsBackground 属性设置为 true,可在任何时候将线程更改为后台线程。
要点
线程的前台或后台状态不影响线程中未处理异常的结果。在 .NET Framework 2.0 版中,前台或后台线程中的未处理异常都将导致应用程序终止。请参见托管线程中的异常。
 
属于托管线程池的线程(即其 IsThreadPoolThread 属性为 true 的线程)是后台线程。从非托管代码进入托管执行环境的所有线程都被标记为后台线程。通过创建并启动新的 Thread 对象而生成的所有线程都默认为前台线程。
如果使用一个线程监视活动(例如套接字连接),请将其 IsBackground 属性设置为 true,以便该线程不会阻止进程终止。

  评论这张
 
阅读(14)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018