我在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()程序就死在那了,怎么解决?
{
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()程序就死在那了,怎么解决?
{
Thread.Sleep(0); // <--加一句给程序响应的机会
data = new byte[1024];
recv = s.ReceiveFrom(data,ref remote);
datas = Encoding.Default.GetString(data);
MessageBox.Show(datas);
}
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住了