我在winforms中製作遊戲wumpus world,其中代理(計算機)可以在四個方向上移動。我使用按鈕控件來顯示和隱藏需要的圖像。我用Thread.Sleep,但問題是,當我點擊按鈕什麼都沒有顯示在窗體上。在後臺進程正常工作,但沒有顯示每一步。是的,我正在使用Thread.Sleep
目前UI
主題。
我想以2秒的間隔向用戶顯示每一步。Thread.Sleep或Timer用於顯示每一步
2
A
回答
3
沒有任何代碼就很難回答,但是我知道的主要問題是你改變世界的外觀,然後告訴它睡覺,女巫意味着什麼都不會畫。然後當線程醒來時,你再次改變世界並讓它休眠。沒有東西會被這樣描繪。
更好的方式來做它將是計時器,使其成爲一個單一的計時器和需要顯示的事件隊列,你正在前進的道路上。
你工作的WinForms,因爲如果你在WPF工作,你可以做的更好的事情
編輯:我不是說定時器是做到這一點的最好辦法,但它是一個很好的有效的方式
4
使用了Thread.Sleep是以下幾個原因,糟糕的設計選擇:
- 它會阻止線程的是睡覺的時間長度。
- 它使用線程池中的線程,所以此解決方案根本無法很好地擴展。
- 這是一個錯誤的定時機制,因爲這裏有一個時間片或量子,它們在操作系統和相同操作系統的不同版本(讀取:Windows)之間有所不同。
此之前的SO問題給出了關於爲什麼的Thread.Sleep是壞的更多信息:
相關問題
- 1. Thread.Sleep導致Timer的回調延遲
- 2. 同步Javascript Timer
- 3. 逐步顯示每個div
- 4. 異步Thread.sleep()方法
- 5. 我應該在我的代碼中使用thread.sleep還是timer?
- 6. Application.Wait或Thread.Sleep
- 7. 每2分鐘進行一次GPS跟蹤(requestLocationUpdates,Timer或Handler)
- 8. 使用Timer或MediaPlayer方法?
- 9. 顯示每一行
- 10. 同步方法vs Thread.Sleep()
- 11. Thread.sleep()在java中同步
- 12. Timer對象的Actionlistener不顯示
- 13. 在異步方法內調用Thread.sleep()
- 14. Java Thread.sleep long或int?
- 15. 關閉屏幕的Android Timer/Handler/Thread.sleep()無法正常工作
- 16. 寧靜黃瓜顯示在控制檯上的每一步
- 17. ruby .map!或每一個用於代替
- 18. TDBGrid - 同步或顯示問題
- 19. 每次顯示一列
- 20. 顯示DIV每天一次
- 21. 每次顯示一格div
- 22. 用於Java的簡單圖形顯示或顯示部件
- 23. 在gridview的每一行顯示每一天的每一天
- 24. 如何顯示HTML表單,每天一次或已刷新再次顯示它
- 25. 以重力形式動態顯示「下一步」或「提交」
- 26. 使用SwingWorker和Timer在標籤上顯示時間?
- 27. 顯示一個大於或等於符號
- 28. 顯示一個夾,用於一個ListView
- 29. 如何使用Thread.sleep顯示簡單的放置動畫?
- 30. Java使用Thread.sleep()或繼續詢問
您正在使用'Thread.Sleep'當前UI線程上? – gunr2171