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

c# – 尝试重新启动线程时发生ThreadStateException,第1张

概述尝试重新启动线程时,我不时会收到System.Threading.ThreadStateException.有问题的代码如下: // Make sure the thread is done stoppingwhile (this.mThread.ThreadState == ThreadState.Running){ Thread.Sleep(0);}// Respawn a 尝试重新启动线程时,我不时会收到System.Threading.ThreadStateException.有问题的代码如下:
// 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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249902.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存