我目前正在使用VisualStudio(WPF应用程序)中的C#/ Xaml为我的第一个项目创建一个游戏。为了简化我的问题,我目前有一个按钮在一个窗口的位置显示一个随机图像(我布置了4个图像,所有折叠,然后这个代码将随机出现一个然后消失)。
而不是单击按钮,我想要一个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 :(得分: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)
。这一切都改变了。