Thread.Sleep会影响ThreadState吗?

时间:2009-06-09 14:47:47

标签: c# multithreading

如果我创建并启动一个线程,那么在该线程中调用Thread.Sleep(x)如何影响ThreadState(如果有的话)?

谢谢!

5 个答案:

答案 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。“