C#线程销毁重新生成为什么会出现ThreadStateException

qiqihua 2008-04-14 03:10:34

private void StopQueryDataThread()
{
// 终止数据查询线程
m_stopQuery = true;
if (m_dataQueryThread != null)
{
m_dataQueryThread.Join(300);
if ((m_dataQueryThread != null) && (m_dataQueryThread.IsAlive))
{
m_dataQueryThread.Abort();
}
m_dataQueryThread = null;
}
}
private bool StartMonitorConnectionThread()
{
try
{
m_connectionMonitorThread = new Thread(new ThreadStart(MonitorConnectionThreadStart));
m_connectionMonitorThread.Priority = ThreadPriority.Lowest;
m_connectionMonitorThread.Name = "连接监视线程";
m_connectionMonitorThread.Start();
m_stopMonitor = false;
}
catch (ThreadStateException) // 线程已启动
{
return true;
}
catch (SecurityException) // 调用方没有适当的 SecurityPermission
{
return false;
}
catch (OutOfMemoryException) // 没有足够的内存启动该线程
{
return false;
}

return true;
}


第一次调用StartMonitorThread时线程正常运行,线程运行后我在另一个优先级较低的线程中调用StopQueryDataThread()后再调用StartMonitorConnectionThread()出现问题,try语句捕获不到异常,调试出现以下信息,线程状态为Stopped,请问是怎么回事?

调试错误提示为:“dataQueryThread.Priority”引发了“System.Threading.ThreadStateException”类型的异常 System.Threading.ThreadPriority {System.Threading.ThreadStateException}

“dataQueryThread.IsBackground”引发了“System.Threading.ThreadStateException”类型的异常
...全文
326 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
washing0432 2011-07-06
  • 打赏
  • 举报
回复
同样碰到问题,关注
qiqihua 2008-04-18
  • 打赏
  • 举报
回复
情况有变,调试时线程正常运行,但脱离开发环境线程状态即为stopped
qiqihua 2008-04-17
  • 打赏
  • 举报
回复
将m_connectionMonitorThread的优先级设置为Normal可以解决问题,难道低优先级线程中不能启动较高优先级的线程么?以前这么用过没有问题的
qiqihua 2008-04-17
  • 打赏
  • 举报
回复
回了帖子才显示出来
谢谢yilanwuyu123,我试一下
问题莫名其妙,在最初的设计中也是这么实现的,断开后是可以重新连接的,把这个类重写之后发现在线程中启动线程,启动的线程不能运行且捕获不到任何异常
qiqihua 2008-04-17
  • 打赏
  • 举报
回复
自己顶一下,服了这个论坛,管理里面显示回复数2,进来没人回复
yilanwuyu123 2008-04-14
  • 打赏
  • 举报
回复
后台线程
yilanwuyu123 2008-04-14
  • 打赏
  • 举报
回复
友情UP 持续关注

110,557

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧