C# 色斑的褪色效应

C# 色斑的褪色效应,c#,wpf,C#,Wpf,我试图在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<=

我试图在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();
    }
private void Splash\u ContentRendered(对象发送方,事件参数e)
{
系统线程线程睡眠(3000);

对于(double x=0;x,因为您正在阻止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();
}
private async void Splash\u ContentRendered(对象发送方,事件参数e)
{
等待任务。延迟(3000);

对于(double x=0;x,虽然我同意@Luaan的解释,为什么作为循环的替代解决方案,您可以使用
Storyboard
double动画
on
不透明性
属性

private void Splash_ContentRendered(object sender, EventArgs e)
{
    var sb = new Storyboard();
    var da = new DoubleAnimation(0, 1, new Duration(TimeSpan.FromSeconds(1.5)));
    da.BeginTime = TimeSpan.FromSeconds(3);
    Storyboard.SetTargetProperty(da, new PropertyPath("Opacity"));
    Storyboard.SetTarget(da, img_waves);
    sb.Children.Add(da);
    sb.Completed += (s1, e1) => this.Close();
    sb.Begin();
}

只是一个粗略的猜测,尝试在每次迭代中刷新组件?谢谢你的回复,Luaan.Task。延迟来自.NET 4.5,我猜。我使用的是.NET 3.5。但是,现在我确实明白了我的问题所在。谢谢!@KennedySouza如果你坚持使用.NET 3.5,这有点棘手。我会坚持使用WPF本机解决方案-使用动画效果。谢谢!现在我知道了这是我的第一个C#应用程序。我用一个在巴西被称为“Gambiara”的东西解决了我的问题。我为.net 3.5制作了我自己的“task.delay”,但是,你的代码更好!哈哈哈