C# 线程。显示每个步骤的睡眠或计时器
我正在用winforms做一个游戏,其中一个代理(计算机)可以向4个方向移动。我使用按钮控制的基础和显示和隐藏的图像在任何时候都需要。我使用了Thread.Sleep,但问题是当我点击按钮时,表单上并没有显示任何内容。后台的流程运行良好,但没有显示每个步骤。是的,我正在当前C# 线程。显示每个步骤的睡眠或计时器,c#,winforms,timer,thread-sleep,C#,Winforms,Timer,Thread Sleep,我正在用winforms做一个游戏,其中一个代理(计算机)可以向4个方向移动。我使用按钮控制的基础和显示和隐藏的图像在任何时候都需要。我使用了Thread.Sleep,但问题是当我点击按钮时,表单上并没有显示任何内容。后台的流程运行良好,但没有显示每个步骤。是的,我正在当前UI线程中使用线程。 我想以2秒的间隔向用户展示每一步。没有任何代码就很难回答,但据我所知,主要问题是你改变了世界的外观,然后让它睡觉,这意味着什么都不会被画出来。然后当线程醒来时,你再次改变世界,让它进入睡眠。没有什么东西会
UI
线程中使用线程。
我想以2秒的间隔向用户展示每一步。没有任何代码就很难回答,但据我所知,主要问题是你改变了世界的外观,然后让它睡觉,这意味着什么都不会被画出来。然后当线程醒来时,你再次改变世界,让它进入睡眠。没有什么东西会被画成那样
更好的方法是使用定时器,将其设置为一个定时器和一个需要显示的事件队列,这样您就可以完成任务了
您是否在使用winForms,因为如果您在使用WPF,您可以做更多更好的事情
编辑:我并不是说计时器是最好的方式,但它是一种很好的有效方式使用线程。睡眠是一种糟糕的设计选择,原因有几个:
它在线程睡眠期间阻塞线程
它会耗尽线程池中的线程,因此此解决方案根本无法很好地扩展
这是一种糟糕的计时机制,因为这里有一个时间片,或者说量子,在不同的操作系统甚至同一操作系统的版本(读:Windows)之间变化
前一个SO问题提供了有关Thread.Sleep不好的原因的更多信息:
您正在使用线程。是否在当前UI线程上睡眠?