C#XAML-仅显示最后一次迭代而没有介于两者之间的循环



我目前正在使用VisualStudio(WPF应用程序(中的C#/XAML合作,为我的第一个项目创建游戏。为了简化我的问题,我目前有一个按钮在窗口中的位置显示一个随机图像(我布置了4个图像,所有图像崩溃了,然后该代码将使一个随机显示每秒,然后消失(。

>

而不是单击按钮,我希望一个用于循环循环浏览代码并显示随机映像,等待一秒钟,然后消失并弹出另一个。我希望这种情况会自动发生一定量的周期。

我当前代码的一部分是:

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秒钟?

您正在将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)。这就是所有的变化。

最新更新