gpt4 book ai didi

c# - 闪屏上的淡入淡出效果

转载 作者:太空狗 更新时间:2023-10-30 01:17:52 24 4
gpt4 key购买 nike

我正在尝试在 WPF 应用程序的初始屏幕上产生淡入淡出效果。图像对象的不透明度最初为 0。此代码会将不透明度从 0(最小)修改为 1(最大),但是 img_waves.Opacity 行不起作用。图像不透明度保持为 0。

private void Splash_ContentRendered(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(3000);
for (double x = 0; x<=1; x+=0.01d)
{
System.Threading.Thread.Sleep(15);
//MessageBox.Show(x.ToString());
img_waves.Opacity = x;
}
this.Close();
}

但是,如果我激活“MessageBox.Show(x.ToString());”这一行正如您在这张图片上看到的:Code is working

代码有效,但我必须不断点击消息框。

我的问题是:为什么?为什么没有 MessageBox.Show 就不能工作?

最佳答案

因为您阻塞了 GUI 线程。它永远没有机会重绘表格。当您添加消息框时,消息队列被抽取,从而允许绘图。

最简单的处理方式是这样的:

private async void Splash_ContentRendered(object sender, EventArgs e)
{
await Task.Delay(3000);

for (double x = 0; x<=1; x+=0.01d)
{
await Task.Delay(15);

img_waves.Opacity = x;
}

this.Close();
}

请注意,这意味着在动画期间仍然可以与表单进行交互。这对于启动画面来说应该不是问题,但它可能会给您带来“真实”形式的麻烦。尽管如此,请确保表单在动画期间不能关闭 - 这可能会导致异常:)

还有其他方法可以强制消息队列被抽取,但通常不被接受。

综上所述,您使用的是 WPF - 为什么要像这样手动制作动画?不能在 WPF 中直接将其作为动画效果来处理吗? MSDN 上有样本.

关于c# - 闪屏上的淡入淡出效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30103016/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com