2013-07-21 65 views
2

我在winforms中製作遊戲wumpus world,其中代理(計算機)可以在四個方向上移動。我使用按鈕控件來顯示和隱藏需要的圖像。我用Thread.Sleep,但問題是,當我點擊按鈕什麼都沒有顯示在窗體上。在後臺進程正常工作,但沒有顯示每一步。是的,我正在使用Thread.Sleep目前UI主題。
我想以2秒的間隔向用戶顯示每一步。Thread.Sleep或Timer用於顯示每一步

+0

您正在使用'Thread.Sleep'當前UI線程上? – gunr2171

回答

3

沒有任何代碼就很難回答,但是我知道的主要問題是你改變世界的外觀,然後告訴它睡覺,女巫意味着什麼都不會畫。然後當線程醒來時,你再次改變世界並讓它休眠。沒有東西會被這樣描繪。

更好的方式來做它將是計時器,使其成爲一個單一的計時器和需要顯示的事件隊列,你正在前進的道路上。

你工作的WinForms,因爲如果你在WPF工作,你可以做的更好的事情

編輯:我不是說定時器是做到這一點的最好辦法,但它是一個很好的有效的方式

4

使用了Thread.Sleep是以下幾個原因,糟糕的設計選擇:

  1. 它會阻止線程的是睡覺的時間長度。
  2. 它使用線程池中的線程,所以此解決方案根本無法很好地擴展。
  3. 這是一個錯誤的定時機制,因爲這裏有一個時間片或量子,它們在操作系統和相同操作系統的不同版本(讀取:Windows)之間有所不同。

此之前的SO問題給出了關於爲什麼的Thread.Sleep是壞的更多信息:

Why Is Thread.Sleep So Harmful