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

本文关键字:显示 每一步 用于 Timer Sleep Thread | 更新日期: 2023-09-27 18:24:02

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

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

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

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

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

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

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

  1. 它会在线程睡眠的持续时间内阻塞线程
  2. 它使用了线程池中的线程,因此此解决方案根本无法很好地扩展
  3. 这是一种糟糕的定时机制,因为在不同的操作系统甚至同一操作系统的版本(读作:Windows)之间,有一个时间片或量子在起作用

这个之前的SO问题提供了更多关于线程睡眠不好的原因的信息:

为什么Thread.Sleep如此有害