UdpClient uclient;
Int32 port = 2008;
Thread thread;
public Server()
{
InitializeComponent();
uclient = new UdpClient(port);
thread = new Thread(new ThreadStart(StartListen));
thread.Start();
}
private void StartListen()
{
do
{
try
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
Byte[] buffer = uclient.Receive(ref endPoint);
Console.WriteLine(Encoding.ASCII.GetString(buffer));
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
} while (true);
} private void button2_Click(object sender, EventArgs e)
{
thread.Abort();
}
当按按钮button2的时候,线程仍无法终止。请问,应该怎么才能终止thread...
Int32 port = 2008;
Thread thread;
public Server()
{
InitializeComponent();
uclient = new UdpClient(port);
thread = new Thread(new ThreadStart(StartListen));
thread.Start();
}
private void StartListen()
{
do
{
try
{
IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);
Byte[] buffer = uclient.Receive(ref endPoint);
Console.WriteLine(Encoding.ASCII.GetString(buffer));
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
} while (true);
} private void button2_Click(object sender, EventArgs e)
{
thread.Abort();
}
当按按钮button2的时候,线程仍无法终止。请问,应该怎么才能终止thread...
有大虾帮忙回答下吧。在线等。
private void button2_Click(object sender, EventArgs e)
{
thread.Abort();
client = new UdpClient("192.168.0.128", 2008);
Byte[] buffer = Encoding.ASCII.GetBytes("hello,i am sent by udp!");
client.Send(buffer, buffer.Length);
Console.WriteLine(thread.IsAlive);
}
这样就可以触发异常。然后退出线程了。
我想一开始没有退出线程是因为程序执行到 Byte[] buffer = uclient.Receive(ref endPoint); 停在这了。
由于没有收到信息,就一直停在这。
可是觉得这个方法不好,虽然勉强解决了。但我看其他的程序也不是这么用的
线程.join()
一个线程或者是后台线程或者是前台线程。后台线程与前台线程类似,区别是后台线程不会阻止进程终止。一旦属于某一进程的所有前台线程都终止,公共语言运行库就会通过对任何仍然处于活动状态的后台线程调用 Abort 来结束该进程。
设置为后台线程
to lc328 把thread.IsBackground=true,这样是在程序结束后,可以退出线程。但是当点button2的时候,线程仍不能退出。
{
thread.abort();
}