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语句中. 就个人而言,我会尝试重新组织整个代码,这样我就不需要创建另一个线程,而是将代码包含在循环内的线程对象中,以便线程继续运行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |