gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:16:05 24 4
gpt4 key购买 nike

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

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

约翰。

关于c# - 尝试重新启动线程时发生 ThreadStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com