我目前正在使用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)
。这就是所有的变化。