2

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

4

2 回答 2

4

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

  1. 它在线程休眠期间阻塞线程。
  2. 它用尽了线程池中的线程,因此这个解决方案根本无法很好地扩展。
  3. 这是一个糟糕的计时机制,因为这里有一个时间片或量子,它在操作系统甚至同一操作系统的版本之间有所不同(阅读:Windows)。

这个先前的 SO question 提供了更多关于为什么 Thread.Sleep 不好的信息:

为什么 Thread.Sleep 如此有害

于 2013-07-21T14:10:17.750 回答
3

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

更好的方法是计时器,让它成为一个计时器和一个需要显示的事件队列,然后你就可以做到了。

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

编辑:我并不是说 Timer 是最好的方法,但它是一种很好的有效方法

于 2013-07-21T14:08:52.573 回答