0

我有一个为我的初始屏幕创建的 Windows 表单,我在这个表单中添加了一个计时器,启用它并在我的代码中添加了以下行:

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

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

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

我试图在我的代码开头添加这一行:

     Using System.Threading;

我禁用了 timer1,然后我在表单加载事件中添加了下面的行

      Thread.Sleep(5000);
      timer1.Enabled = true;

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

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

任何帮助将不胜感激

4

2 回答 2

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 线程上运行启动画面。通常,您希望在应用程序初始化时并行显示初始屏幕。

于 2012-04-14T00:26:15.033 回答
0

一种方法是添加另一个变量来控制该五秒内的不透明度,例如myOpacity初始化为(假设您的计时器是百分之一秒)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;
}

这样在前五秒(myOpacity从 6 秒到 1 秒),什么都不会改变。然后,在最后一秒,它会淡出。

于 2012-04-14T00:25:30.130 回答