// Make sure the thread is done stopPingwhile (this.mThread.ThreadState == ThreadState.Running){ Thread.Sleep(0);}// Respawn a thread if the current one is stopped or doesn't existif (this.mThread == null || this.mThread.ThreadState == ThreadState.Stopped){ this.mThread = new Thread(new ParameterizedThreadStart(Monitor)); }// Start the threadif (check){ this.mThread.Start(60000); }else{ this.mThread.Start(0); }
所以有两个问题 – 这是正确的做事方式,而且,是否有办法防止错误发生?
解决方法 问题是你有代码首先检查它是否应该创建一个新的线程对象,另一段代码确定是否可以启动线程对象.由于竞争条件和类似的事情,您的代码可能最终尝试在现有线程对象上调用.Start.考虑到你没有在check变量后面发布细节,就不可能知道什么可能触发这种行为.您应该重新组织代码,以便保证仅在新对象上调用.Start.简而言之,您应该将Start方法放入与创建新线程对象的if语句相同的if语句中.
就个人而言,我会尝试重新组织整个代码,这样我就不需要创建另一个线程,而是将代码包含在循环内的线程对象中,以便线程继续运行.
总结以上是内存溢出为你收集整理的c# – 尝试重新启动线程时发生ThreadStateException全部内容,希望文章能够帮你解决c# – 尝试重新启动线程时发生ThreadStateException所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)