C# 为什么不在图像刷新中使用位图图像?

C# 为什么不在图像刷新中使用位图图像?,c#,wpf,bitmapimage,C#,Wpf,Bitmapimage,我正在尝试创建一个简单的掷硬币游戏。我试图创造“旋转硬币”的效果。我有两个位图图像s,从稍微不同的角度显示硬币。我有for循环,并尝试从图像更改位图图像。然而,由于某些原因,这不起作用,它只是跳过coinflip并显示结果。如果我将MessageBox放在每个图像更改之间,它就会工作。为什么? public void spinCoin() { for (int i = 0; i < 200; i++) { try

我正在尝试创建一个简单的掷硬币游戏。我试图创造“旋转硬币”的效果。我有两个
位图图像
s,从稍微不同的角度显示硬币。我有
for
循环,并尝试从
图像
更改
位图图像
。然而,由于某些原因,这不起作用,它只是跳过coinflip并显示结果。如果我将
MessageBox
放在每个图像更改之间,它就会工作。为什么?

public void spinCoin()
    {
        for (int i = 0; i < 200; i++)
        {
            try
            {
                imageBox.Source = side1;
                imageBox.Source = side2;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }

        }
    }

因为这必须在UI线程上执行,所以在方法退出之前,UI永远没有机会进行更新。即使这是与UI线程并行执行的,UI也无法正确显示动画


您需要一个计时器机制来调整更新的速度,并让它在后台线程上运行。或者,您可以使该方法异步并插入
等待任务。在图像源的每个分配之间延迟

因此基本上我需要创建一个新线程,在该线程上启动计时器。计时器运行X毫秒后,会更改图像。我走对了吗?这大概是最复杂的方法了。您可以使用Dispatcher或async Wait with Task。原始方法中存在延迟。感谢您的帮助!我设法使它与async
Wait Task一起工作。Delay
public async void spinCoin()
    {
        label.Content = "Heitetään...";

        for (int i = 0; i < 5; i++)
        {
            imageBox.Source = side1;
            await Task.Delay(50);
            imageBox.Source = side2;
            await Task.Delay(50);


        }

    }
public async void button1_Click(object sender, RoutedEventArgs e)
    {
        spinCoin();
        await Task.Delay(600);
        if (tossCoin() == 1)
        {
            imageBox.Source = kr;
            label.Content = "Kruuna!";
        }
        else
        {
            imageBox.Source = kl;
            label.Content = "Klaava!";
        }
    }