线程无法终止,高手们进来看看
启用了个死循环来监听端口,可是在退出的时候用abort方法不能终止线程,下面是我的代码:
public void Listen(int port)
{
try
{
isStopThread = false;
UDP_Server_Port = port;
UDP_Server = new UdpClient(port);
thUdp = new Thread(new ThreadStart(GetUDPData));
thUdp.Start();
}
catch(Exception e)
{
throw new Exception(e.Message);
}
}
private void GetUDPData()
{
while (!isStopThread)
{
try
{
byte[] RData = UDP_Server.Receive(ref _Server);
if (DataArrival != null)
{
DataArrival(RData, _Server.Address, _Server.Port);
}
Thread.Sleep(0);
}
catch (Exception e)
{
throw new Exception(e.Message);
if (Sock_Error != null)
{
Sock_Error(e.Message);
}
}
}
}
终止线程代码:
while (thUdp.ThreadState != System.Threading.ThreadState.Stopped)
{
//thUdp.Interrupt();
thUdp.Abort();
thUdp.Join();
//thUdp = null;
}
//thUdp.ThreadState = System.Threading.ThreadState.Stopped;
UDP_Server.Close();
这里thUdp.ThreadState 的状态一直是AbortRequested 晕的不行 有没有强行终止线程的方法
小弟现在没有多少分了,等以后有了给大哥们补上,先谢了!
[解决办法]
up
[解决办法]
怎么没人来啊 自己顶一下
[解决办法]
先试试
UDP_Server.Blocking = false;
UDP_Server.Shutdown(SocketShutdown.Both);
UDP_Server.Close();
[解决办法]
你中奖了
[解决办法]
需要动用 Thread.Abort 这种威力强大但结果不可预测的武器么
把 isStopThread 赋为 true, 线程就自动结束啦
[解决办法]
你终止线程的判断条件有问题:
常用如下代码: myThread为活动的线程
if (myThread != null && myThread.IsAlive == true)
{
myThread.Abort();
}
[解决办法]
6楼的可以..回帖是一种美德!每天回帖即可获得 10 分可用分!
[解决办法]
该回复于2009-07-22 10:35:10被版主删除
[解决办法]
在while里面做判断
[解决办法]
private void GetUDPData()中的捕获改一下:
ThreadAbortException
try
{
....
}
catch (ThreadAbortException)
{
....
}
finally
{
....
}
[解决办法]
你使用socket来监听串口数据吗