如何在指定时间内更改属性? 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 只是一个计时器的包装器,有时使用起来很方便。但对于更复杂的动画,计时器可能更合适。
您好,我正在尝试制作一个“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 只是一个计时器的包装器,有时使用起来很方便。但对于更复杂的动画,计时器可能更合适。