我做个UDP服务器端实用线程,
在线程中
byte[] bytes=listener.Receive(ref groupEp);
进行监听,
当我关闭程序时 myThread.Abort();
虽然窗体关闭了,但仍在监听中,该如何关闭监听呢?

解决方案 »

  1.   


    myThread.Abort(); 
    udpReceive.Close();//UdpClient udpReceive = new ....;先关线程,再关UdpClient对象试试...
      

  2.   

    我照上面二位说的做,但程序在运行到Close;的时候报错:
    System.Threading.ThreadAbortException:正在终止线程,
    错误行数还是指示byte[] bytes=listener.Receive(ref groupEp); 
    这句话
      

  3.   

    因为线程阻塞...改用异步处理或者给listener发送一个结束信号,停止listen...
      

  4.   

    即使是多线程的情况,也不推荐采用Receive这样的阻塞方法。可以考虑写一个死循环,然后先判断是不是数据已经Available,再调用Receive。如果没有数据,就继续死循环。当然,如果是单核机器,死循环的写法也很特别,可以参考下面的代码                    if (Environment.ProcessorCount == 1 || unchecked(++loops % 100) == 0)
                        {
                            Thread.Sleep(1);
                        }
                        else
                        {
                            Thread.SpinWait(20);
                        }
                        
                        continue;