2017-04-18 83 views
2

我目前正在使用VisualStudio(WPF應用程序)中的C#/ Xaml爲我的第一個項目創建一個遊戲。爲了簡化我的問題,我現在有一個按鈕在窗口中的某個位置顯示一個隨機圖像(我放置了4張圖像,全部摺疊,然後這些代碼會隨機出現一個圖像,然後消失)。C#XAML - For循環只顯示最後一次迭代,沒有任何介於

我想要一個for循環遍歷代碼並顯示一個隨機圖像,等待一秒鐘,然後消失並彈出另一個圖像,而不是單擊按鈕。我希望這會自動發生一定的週期。

的我的當前代碼段是:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    for (int j = 0; j < 5; j++) 
    { 
     Food1.Visibility = Visibility.Collapsed; 
     Food2.Visibility = Visibility.Collapsed; 
     Food3.Visibility = Visibility.Collapsed; 
     Food4.Visibility = Visibility.Collapsed; 

     int ImageToDisplay = RandomFood.Next(0, 4); 

     if (ImageToDisplay == 0) 
     { 
      Food1.Visibility = Visibility.Visible; 
     } 
     else if (ImageToDisplay == 1) 
     { 
      Food2.Visibility = Visibility.Visible; 
     } 
     else if (ImageToDisplay == 2) 
     { 
      Food3.Visibility = Visibility.Visible; 
     } 
     else if (ImageToDisplay == 3) 
     { 
      Food4.Visibility = Visibility.Visible; 
     } 

     Thread.Sleep(1000); 
    } 
} 

當我執行我的代碼,它凍結5秒,該窗口是空的,那麼只有在5秒後顯示的最後的圖像。如何讓它顯示不同的圖像,然後每秒消失5秒?

+0

它凍結,因爲你告訴它這樣做。它做了一堆'if'條件,然後睡覺,當它醒來時它必須執行下一個循環。繼續做5次,然後有機會顯示最後一張圖像,因爲這是最後一次迭代發生的情況。你需要[這個](http://stackoverflow.com/questions/5410430/wpf-timer-like-c-sharp-timer) – CodingYoshi

回答

1

您正在將UI線程置於睡眠狀態。你需要與async/await一起工作。這裏有一個選項:

private async void Button_Click(object sender, RoutedEventArgs e) 
{ 
    for (int j = 0; j < 5; j++) 
    { 
     Food1.Visibility = Visibility.Collapsed; 
     Food2.Visibility = Visibility.Collapsed; 
     Food3.Visibility = Visibility.Collapsed; 
     Food4.Visibility = Visibility.Collapsed; 

     int ImageToDisplay = RandomFood.Next(0, 4); 

     if (ImageToDisplay == 0) 
     { 
      Food1.Visibility = Visibility.Visible; 
     } 
     else if (ImageToDisplay == 1) 
     { 
      Food2.Visibility = Visibility.Visible; 
     } 
     else if (ImageToDisplay == 2) 
     { 
      Food3.Visibility = Visibility.Visible; 
     } 
     else if (ImageToDisplay == 3) 
     { 
      Food4.Visibility = Visibility.Visible; 
     } 

     await Task.Delay(1000); 
    } 
} 

通知的async void Button_Click(...)await Task.Delay(1000)。這一切都改變了。

+0

這完美的作品!我做到了這一點,它的工作原理就是我想要的。非常感謝! – freeflow488