调查大家如何关闭线程的?比如 你在主线程里 需要调用子线程完成某些操作 例如服务器监听客户端的消息当主线程退出时 你是如何友好地关闭子线程的?

解决方案 »

  1.   

    子线程分为两种不同类型的线程:前台线程和后台线程。
    (1)应用程序必须运行完所有的前台线程才可以退出;
    (2)后台线程,应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的后台线程在应用程序退出时都会自动结束。通过设置 Thread.IsBackground 属性,可以将一个线程指定为后台线程或前台线程。
    (1)通过将 Thread.IsBackground 设置为 true,就可以将线程指定为后台线程。
    (2)通过将 Thread.IsBackground 设置为 false,就可以将线程指定为前台线程。创建线程:
    (1)从非托管代码进入托管执行环境的所有线程都被标记为后台线程。
    (2)通过创建并启动新的 Thread 对象而生成的所有线程都是前台线程。线程关闭:
    如果要创建希望用来侦听某些活动(如套接字连接)的前台线程,则应将 Thread.IsBackground 设置为 true,以便进程可以终止。
      

  2.   

    Thread thread1 = new Thread(new ThreadStart(accp1));
    thread1.IsBackground = true;
    thread1.Start();这样,主进程结束时,子线程自动关闭
      

  3.   

    线程是寄宿在进程的地址空间中的,进程结束了,线程自然就结束了。楼主大概意思应该是说,如果UI中启动多个线程(工作线程),当用户直接关闭窗体的时候这些正在工作的线程该如何么?如果是这样你大概可以模仿COM+的引用计数器的方式来工作,你可以定义一个全局计数器来记录启动了多少线程
    int ThreadCount = 0;
    每当启动一个线程时ThreadCount++
    当线程完成工作的时候(一般在线程调用方法的最后一行)的时候回调(this.Invoke(EventHandler))来通知主线程该线程已经工作完成。当用户关闭主线程的时候,你可以检查这个ThreadCount是否为0,如果是0说明左右的工作线程都工作完毕,此时可以安全的关闭主线程,否则主线程处于等待状态,直到ThreadCount为0的时候才关闭。大概思路如此,具体实现代码,请自己实现。