当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《尝试重新启动线程时发生ThreadStateException》经验,为你挑选了1个好方法。

尝试重新启动线程时,我不时会收到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); 
}

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



1> John Richard..:

一个线程可能同时处于多个状态,因此ThreadState属性实际上是可能状态的位图.因此,只用一个状态来测试相等性就不会给你正确的结果.您需要执行以下操作:

if((mThread.ThreadState & ThreadState.Running) != 0)

但是,检查线程状态是做错的.我并不完全清楚你想要实现的目标,但我猜你正在等待一个线程在重新启动之前终止.在这种情况下,你应该这样做:

mThread.Join();
mThread = new Thread(new ParameterizedThreadStart(Monitor));
if(check)
    mThread.Start(60000);
else
    mThread.Start(0);

虽然如果你描述你想要更详细解决的问题,我几乎可以肯定会有更好的解决方案.等待一个线程结束只是为了重新启动它对我来说似乎并不高效.也许你只需要某种线程间的通信?

约翰.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有