windows的线程属性,分成"前台线程"和"后台线程"这两种吗

windows的线程属性,分为"前台线程"和"后台线程"这两种吗?
以前用VC调用api创建线程,不管是api的CreateThread,还是c运行库扩展的_beginthreadex,还是MFC的AfxBeginThread,都只是创建一个线程而已,并不说线程本身还有一个属性叫做"前台线程"还是"后台线程"。

但是最近用.net编程的时候发现有Thread.IsBackground这个bool类新的属性,用以表示一个线程是前台的还是后台的。如果一个C#的winform程序,主窗口创建一个前台线程,那么即使主窗口关闭了,这个线程乃至这个进程会继续运行。

所以我的疑问就在于,.net里面的这个IsBackground概念,是.net framework自己提供的,还是windows api的线程就具有的某种属性或者特性?

谢谢。
------解决方案--------------------
 如果一个C#的winform程序,主窗口创建一个前台线程,那么即使主窗口关闭了,这个线程乃至这个进程会继续运行。从逻辑上看你这句话就知道你理解错了。


.Net的公用语言运行时(Common Language Runtime,CLR)能区分两种不同类型的线程:前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。

  .net环境使用Thread建立的线程默认情况下是前台线程,即线程属性IsBackground=false,在进程中,只要有一个前台线程未退出,进程就不会终止。主线程就是一个前台线程。而后台线程不管线程是否结束,只要所有的前台线程都退出(包括正常退出和异常退出)后,进程就会自动终止。一般后台线程用于处理时间较短的任务,如在一个Web服务器中可以利用后台线程来处理客户端发过来的请求信息。而前台线程一般用于处理需要长时间等待的任务,如在Web服务器中的监听客户端请求的程序,或是定时对某些系统资源进行扫描的程序。下面的代码演示了前台和后台线程的区别。

------解决方案--------------------
前台线程和后台线程。这两者的区别就是:应用程序必须运行完所有的前台线程才可以退出;而对于后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。
------解决方案--------------------
.net里面的这个IsBackground概念,是.net framework自己提供的?
不是,这个概念一直有,并非.net产生。
  一句话,后台线程在主线程完了后自动会退出的。

------解决方案--------------------
MFC中对线程分为“前台”和“工作者”线程,说白了,前台就是带界面的,工作者就是没界面的
------解决方案--------------------
net里面的这个IsBackground概念,是.net framework自己提供的,还是windows api的线程就具有的某种属性或者特性?
---------------------------------------------------------------------------------------------------------
不清楚是不是.net framework自己提供的,但起码windows api的线程是不具备这种属性。
windows api产生的线程都是工作线程,是独立运行的,跟exe或者主线程没什么关系,严格说唯一的关系就是如果主线程正常退出了,进程会结束,这个工作线程一般也会随着进程结束而结束。不管是CreateThread还是_beginthreadex都是这种。

而MFC的AfxBeginThread这个不同,你看MSDN会发现AfxBeginThread有2种形式(具体看MSDN懒得贴了),这两种形式也对应了2种线程(UI线程和work线程)两者的唯一区别是前者有消息循环,但注意有消息循环并不一定有界面,4L的说法是错误的。当一个work线程调用了类似CreateWindow,GetMessage或者类似的API,那么work线程会产生消息循环,这时候work线程就变成了一个UI线程。