如何在指定时间内更改属性? C#

How to change a property for a specified time? C#

您好,我正在尝试制作一个“flash 动画”,让屏幕变白几分之一秒,然后恢复正常。

这是我的代码:

private void QuickFallAnimation ()
    {
        plGame.BackColor = Color.White;
        Thread.Sleep(50);
        plGame.BackColor = Color.Black;
    }

问题是背景颜色永远不会变成白色。它只是保持黑色,即使应用程序的其余部分暂停了 50 毫秒。有人可以帮忙吗?

问题的原因是您将 UI 线程置于休眠状态。休眠时 UI 被阻塞,无法执行 re-render。 从不阻塞 UI 线程

更改代码以使用 async/await 应该可以解决问题:

private async Task QuickFallAnimation ()
    {
        plGame.BackColor = Color.White;
        await Task.Delay(50);
        plGame.BackColor = Color.Black;
    }

您可能还需要手动触发 re-render,例如 plGame.Invalidate();

同样可以用定时器来完成。 Task.Delay 只是一个计时器的包装器,有时使用起来很方便。但对于更复杂的动画,计时器可能更合适。