我在Form1_Load里面启动一个线程netThread,函数是net().public void net()
{
int recv;
byte[] data;
string datas;
IPEndPoint me = new IPEndPoint(IPAddress.Parse("127.0.0.1"),3131);
Socket s = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
s.Bind(me);
IPEndPoint sender = new IPEndPoint(IPAddress.Any,0);
EndPoint remote = (EndPoint)(sender);

while(true)
{ data = new byte[1024];
recv = s.ReceiveFrom(data,ref remote);
datas = Encoding.Default.GetString(data);
MessageBox.Show(datas);

}

}
就是循环以udp方式从3131端口读数据,然后用对话框显示,但我在其他线程中调用netThread.Abort()没有效果,调用后netThread.IsAlive还是true,在调用join()程序就死在那了,怎么解决?

解决方案 »

  1.   

    while(true)
    {
    Thread.Sleep(0); //  <--加一句给程序响应的机会
    data = new byte[1024];
    recv = s.ReceiveFrom(data,ref remote);
    datas = Encoding.Default.GetString(data);
    MessageBox.Show(datas);
    }
      

  2.   

    这样调试一下
    while(true)
    {
      Console.WriteLine("01");
    Thread.Sleep(0); //  <--加一句给程序响应的机会
      Console.WriteLine("02");
    data = new byte[1024];
      Console.WriteLine("03");
    recv = s.ReceiveFrom(data,ref remote);
      Console.WriteLine("04");
    datas = Encoding.Default.GetString(data);
      Console.WriteLine("05");
    MessageBox.Show(datas);
      Console.WriteLine("06");
    }
    看看到底是哪里没有走下去,如果循环能一个接一个的话不会出现你所说的现象的。估计是程序走到哪一个环节被block住了
      

  3.   

    或者看一下while进去了吗?我很怀疑recv = s.ReceiveFrom(data,ref remote);会被block住
      

  4.   

    ReceiveFrom应该就会阻塞吧,那就没办法Abort了?
      

  5.   

    解决了,先s.close()就可以了,jamesfay(James Fay)有没有其他办法?没有也结贴了。