如果我创建并启动一个线程,那么在该线程中调用Thread.Sleep(x)如何影响ThreadState(如果有的话)?
谢谢!
答案 0 :(得分:4)
来自MSDN
WaitSleepJoin 线程被阻止。 这可能是打电话的结果 Thread.Sleep或Thread.Join,of 请求锁定 - 例如,通过 调用Monitor.Enter或Monitor.Wait - 或等待线程 同步对象如 ManualResetEvent的。
简短回答是:是的!
答案 1 :(得分:4)
ThreadState定义了一组all 线程的可能执行状态。 一旦创建了一个线程,它就在 至少有一个州,直到它 终止。在。中创建的线程 公共语言运行库最初 在Unstarted状态,而在外部 进入运行时的线程是 已经处于运行状态。一个 未启动的线程已转换为 通过调用Start来运行状态。 并非ThreadState的所有组合 值有效;例如,a 线程不能同时在Aborted中 和未启动的国家。
重要:线程状态只对少数调试感兴趣 场景。你的代码永远不应该使用 线程状态来同步 线程的活动。
ThreadState: WaitSleepJoin :由于调用Wait,Sleep或Join,线程被阻止。
来自here。
答案 2 :(得分:3)
我不希望这是一个讽刺性的回答,因为这对任何人都没有帮助 - 所以请按照预期的精神来接受这个。
您是否尝试创建一个简单的winform应用程序,其中包含用于启动,停止和睡眠线程的按钮以及用于显示thread.ThreadState值的状态区域?
这将回答你的问题。
如果你打算投票,至少可以解释原因。我试图建议的是人们在发布问题之前做了一些实验。如果他们的实验没有回答他们的问题,他们可以在这里询问他们已经尝试过的证据。
答案 3 :(得分:1)
它转换为WaitSleepJoin
。
答案 4 :(得分:1)
该线程应该放入ThreadState.WaitSleepJoin。
有关详细信息,请参阅ThreadState's Documentation,具体为:
WaitSleepJoin:“线程被阻塞。这可能是调用Thread .. ::。Sleep或Thread .. ::。Join,请求锁定的结果 - 例如,通过调用Monitor .. ::。输入或监视.. ::。等待 - 或等待线程同步对象,如ManualResetEvent。“