请关注下面的贴子
http://www.csdn.net/expert/topic/701/701403.xml?temp=.7961542

解决方案 »

  1.   

    catch (Exception e) 
          {
           MessageBox.Show(e.ToString());
          }
    在这里面判断一下e的类型,如果是你项屏蔽的那种错误就不要显示一点建议
    这种弹出提示框提示错误的处理方法很不友好,特别是在这种侦听的线程里面,建议不要这样处理
      

  2.   

    是啊!我就是不想让他显示出来,可是我用了catch但他捕获不着,所以我觉得不是错误。有其他办法吗?
      

  3.   

    ...
    提供一个比较麻烦的方法
    ...
    在要结束的时候开启一个线程
    监视所有进程,看看有没有你不想看到的对话框出现,如果有...kill
      

  4.   

    实际上ThreadAbortException是不一定能够捕捉到了。C#中终止线程同java一样均不推荐用Thread.Abort(),推荐的方法是设置一个变量,为线程终止的条件。外部函数控制这个变量即可。
    例如:
    while(!threadabor){
    .....
    }
    终止线程时采用threadabor=true;
      

  5.   

    javaduke 谢谢你,
             可是我在线程中进行tcplistener.AcceptTcpClient(),这个函数好象一直等到有连接才退出,我加个标志,还是要等到下次客户端连接才能退出。帮帮忙明天交差!
      

  6.   

    TcpListener.Stop()可以强行终止AcceptTcpClient过程,用Stop()加上现成结束标识变量的方法比较好。
      

  7.   

    涉及通讯的线程一旦启动就不能通过外部方法关闭
    因为TcpListener.AccpetTcpClient();是阻塞方式运行的。你可以用异步来完成工作,这样做完工作时,线程也就自动挂起了。
    Socket _SocketServer=new Socket....;
    _SocketServer.BeginAccept(...);
    再通过委托确定接收到连接时执行那个函数。建议,使用异步通讯,再配合线程池(ThreadPool)这样程序会很稳定的工作。