如何让Splash Screen在开始淡出之前等待几秒钟?

时间:2012-04-14 00:16:55

标签: c# .net splash-screen

我有一个我为启动画面创建的Windows窗体,我在此窗体中添加了一个计时器,启用它并在我的代码中添加以下行:

     private void timer1_Tick(object sender, EventArgs e)
    {
        this.Opacity -= 0.01;

        if (this.Opacity <= 0)
        {
            this.Close();
        }   
    }

启动画面淡出,但问题是我希望它在100%可见(不透明度= 1.0)的5秒内然后它开始渐渐淡出直到它关闭!

我尝试在代码的开头添加此行:

     Using System.Threading;

我禁用了timer1,然后我在表单加载事件

上添加了以下行
      Thread.Sleep(5000);
      timer1.Enabled = true;

但幸运的是,这对我不起作用,这使得应用程序在显示启动画面之前等待5次,然后显示它并立即淡化它。

如何让启动画面显示5秒然后淡出?

Anyhelp表示赞赏

2 个答案:

答案 0 :(得分:1)

最初将计时器的间隔设置为5000。

private void timer1_Tick(object sender, EventArgs e) 
{ 
    timer1.Enabled = false;
    timer1.Tick -= timer1_Tick;
    timer1.Tick += FadeOut;
    timer1.Interval = /* whatever your original interval was */
    timer1.Enabled = true;
} 

private void FadeOut(object sender, EventArgs e) 
{ 
    this.Opacity -= 0.01; 

    if (this.Opacity <= 0) 
    { 
        this.Close(); 
    }    
} 

这将导致计时器首先延迟5秒,然后重复使用计时器来执行不透明度变化。

如果Thread.Sleep()调用阻止了您的应用程序,则表示您没有在单独的UI线程上运行启动画面。通常,您希望在应用程序初始化时并行显示启动画面。

答案 1 :(得分:0)

一种方法是在五秒钟内添加控制不透明度的另一个变量,例如myOpacity初始化为(假设您的计时器是百分之一秒){{1} }:

6

这种方式在前五秒(private void timer1_Tick(object sender, EventArgs e) { this.myOpacity -= 0.01; if (this.myOpacity <= 0) this.Close(); else if (this.myOpacity <= 1) this.Opacity -= this.myOpacity; } 从6下降到1),没有任何改变。然后,在最后一秒,它将淡出。