【问题标题】:How to make a Splash Screen wait a few seconds before start fading out?如何让启动画面在开始淡出之前等待几秒钟?
【发布时间】:2012-04-14 00:16:55
【问题描述】:

我有一个为我的初始屏幕创建的 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 秒然后淡出?

任何帮助将不胜感激

【问题讨论】:

  • 有史以来最烦人的闪屏
  • 我和詹姆斯一起做这个。考虑您的应用程序的用户 - 启动屏幕应该在您的应用程序初始化时为您提供一些可以查看的内容。如果您没有什么要初始化的,那么您只是让您的用户在酷炫的初始屏幕的初始吸引力变老之后等待。

标签: c# .net splash-screen


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

【讨论】:

    【解决方案2】:

    一种方法是添加 另一个 变量来控制五秒内的不透明度,例如 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),什么都不会改变。然后,在最后一秒,它会淡出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-20
      • 2014-12-04
      • 1970-01-01
      • 2021-07-07
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      相关资源
      最近更新 更多