// 但是在程序终止时这个线程不会被终止如果函数可以正常返回,那自己就会中止,无需显式调用Abort()

解决方案 »

  1.   

    定义一个bool全局变量
    在结束按钮里面重设它
    在你的线程里面判断
      

  2.   

    Abort是强制关闭线程,不大好
      

  3.   

    参考:public class MyThread {     public static void Work()      {         try          {              for( int i = 0; i < 4; i++ )               {                   Console.WriteLine( Thread.CurrentThread.Name + "正在计算" + i.ToString() );                   Thread.Sleep( 50 );              }         }         catch( ThreadAbortException e )          {              Console.WriteLine( "错误信息:{0}", e.Message );              Thread.ResetAbort();//取消主线程要求中止的请求,如不执行则ThreadAbortException会在catch块末端再次引发         }         Console.WriteLine( Thread.CurrentThread.Name + "完成工作!" );     }} class ThreadAbortTest{     public static void Main()      {         Console.WriteLine( "主线程启动!");         Thread thread = new Thread( new ThreadStart( MyThread.Work ) );//MyThread.Work代表要执行的线程函数,它可以是静态的,也可以是某个类实例的方法,它是要执行的线程函数的委托         thread.Name = "MyThread";         thread.Start();//线程启动后将被CPU调度,但不一定是马上执行,所以同样的例子在不同的机器上可能会有不同的结果。         Console.WriteLine( "主线程第一次休眠!");         Thread.Sleep( 100 );         Console.WriteLine( "MyThread被挂起!");         thread.Suspend();//挂起子线程         Console.WriteLine( "主线程第二次休眠!");         Thread.Sleep( 100 );         Console.WriteLine( "MyThread被恢复!");         thread.Resume();//恢复子线程         thread.Abort();//终止子线程         thread.Join();//直到到子线程完全终止了,主线程才继续运行         Console.WriteLine( "主线程终止!" );         Console.ReadLine();     }}
      

  4.   

    你使用的是阻塞式的Socket?在侦听消息时线程可能不会被终止
    设置Blocking为false试试。