尝试重新启动线程时,我有时会收到 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);
}
所以有两个问题 - 这是正确的做事方式吗?是的,有没有办法防止错误发生?
线程有可能同时处于多个状态,因此 ThreadState 属性实际上是可能状态的位图。因此,仅测试一种状态的相等性不会给您正确的结果。你需要做类似的事情:
if((mThread.ThreadState & ThreadState.Running) != 0)
然而,检查线程状态是错误的做法。我不完全清楚你想要实现什么,但我猜你正在等待线程终止然后重新启动它。在这种情况下你应该这样做:
mThread.Join();
mThread = new Thread(new ParameterizedThreadStart(Monitor));
if(check)
mThread.Start(60000);
else
mThread.Start(0);
尽管如果您更详细地描述您要解决的问题,我几乎可以肯定会有更好的解决方案。等待线程结束只是为了再次重新启动它对我来说似乎效率不高。也许您只需要某种线程间通信?
John.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)