加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 尝试重新启动线程时发生ThreadStateException

发布时间:2020-12-15 08:30:51 所属栏目:百科 来源:网络整理
导读:尝试重新启动线程时,我不时会收到System.Threading.ThreadStateException.有问题的代码如下: // Make sure the thread is done stoppingwhile (this.mThread.ThreadState == ThreadState.Running){ Thread.Sleep(0);}// Respawn a thread if the current on
尝试重新启动线程时,我不时会收到System.Threading.ThreadStateException.有问题的代码如下:
// Make sure the thread is done stopping
while (this.mThread.ThreadState == ThreadState.Running)
{ 
    Thread.Sleep(0);
}
// Respawn a thread if the current one is stopped or doesn't exist
if (this.mThread == null || this.mThread.ThreadState == ThreadState.Stopped)
{ 
    this.mThread = new Thread(new ParameterizedThreadStart(Monitor)); }
// Start the thread
if (check)
{ 
    this.mThread.Start(60000); 
}
else
{   
    this.mThread.Start(0); 
}

所以有两个问题 – 这是正确的做事方式,而且,是否有办法防止错误发生?

解决方法

问题是你有代码首先检查它是否应该创建一个新的线程对象,另一段代码确定是否可以启动线程对象.由于竞争条件和类似的事情,您的代码可能最终尝试在现有线程对象上调用.Start.考虑到你没有在check变量后面发布细节,就不可能知道什么可能触发这种行为.

您应该重新组织代码,以便保证仅在新对象上调用.Start.简而言之,您应该将Start方法放入与创建新线程对象的if语句相同的if语句中.

就个人而言,我会尝试重新组织整个代码,这样我就不需要创建另一个线程,而是将代码包含在循环内的线程对象中,以便线程继续运行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读