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

解决方案 »

  1.   

    同意seabirdforever(听海)将线程设为后台即可
      

  2.   

    seabirdforever(听海),你说的不行,即使程序退出了,在Windows任务管理中还是能看到进程。安全的方法是写一deamon线程监控所有其他线程,当程序退出前,把消息发给deamon线程,让deamon线程强行杀死所有被监控线程,然后再退出,这样就彻底从系统中退出了。
      

  3.   

    我写了一个程序,开启一个线程(设置为前台线程 IsBackground = false),我可以直接关闭程序阿,而且线程然在运行,这是为什么?不是说“应用程序必须运行完所有的前台线程才可以退出”吗?
      

  4.   

    一般的做法是在线程里面加个标识,如bool isrunning=true
    while(isrunning)
    {
    这里进行recv处理;
    如果接收到一个特殊的字符的话(这个控制符自己定,不大可能重复就可以),判断这个信息是不是本机发出的,如果是的话,将isrunning设为false;退出线程
    }
    这样的话,在退出程序的时候,你向自己的线程发一个退出的控制符即可。
      

  5.   

    to  betatong(辉辉) 
    我写了一个程序,开启一个线程(设置为前台线程 IsBackground = false),我可以直接关闭程序阿,而且线程然在运行,这是为什么?不是说“应用程序必须运行完所有的前台线程才可以退出”吗?
    是这样理解的,你设为前台进程后,可以直接关闭可以直接关闭程序阿,而且线程然在运行,这点你也确定了,那么就对了,线程仍然在运行就说明实际上应用程序没有完全退出啊,要知道这个正在运行的线程也是你刚才运行的应用程序的一部分。表面上你是关闭了应用程序,实际上它没有完全退出,它里面的线程依然在运行如果设为后台线程
    程序退出后
    线程不是马上就退出,这是CLR自动管理的
    所以即使结束应用程序,短时间内在任务管理器里面还是可以看到
    等一段时间会自动停止后台线程
    另外一种方法是如 pkzl888() 在线程里面设标志,通过检测标志来使线程退出,这样退出快些。