Thread.Sleep或Timer用于显示每一步

时间:2013-07-21 14:02:29

标签: c# winforms timer thread-sleep

我在winforms中制作游戏wumpus world,其中代理(计算机)可以在4个方向上移动。我正在使用按钮控制基础,并在需要时显示和隐藏图像。我使用Thread.Sleep,但问题是,当我点击按钮时,表格上没有显示任何内容。后台进程工作正常,但没有显示每一步。是的,我在当前Thread.Sleep主题中使用UI
我想以2秒的间隔向用户展示每一步。

2 个答案:

答案 0 :(得分:4)

使用Thread.Sleep是一个糟糕的设计选择,原因如下:

  1. 它会在休眠期间阻止线程。
  2. 它耗尽了线程池中的线程,因此该解决方案根本无法很好地扩展。
  3. 这是一个糟糕的计时机制,因为这里有一个时间片或量子,在操作系统甚至同一操作系统的版本之间有所不同(阅读:Windows)。
  4. 此前的SO问题提供了有关Thread.Sleep为何错误的更多信息:

    Why Is Thread.Sleep So Harmful

答案 1 :(得分:3)

没有任何代码就很难回答,但我理解的主要问题是你改变了世界的外观,然后告诉它睡觉,女巫意味着什么都不会画。然后当线程醒来时,你再次改变世界并使其进入睡眠状态。什么都不会那样画。

更好的方法是使用计时器,将其作为单个计时器和需要显示的事件队列,然后您就可以了。

你是在使用winForms,因为如果你正在使用WPF,你可以做更好的事情

编辑:我不是说Timer是最好的方法,但这是一个很好的有效方式