2. WPF显示一个启动画面(欢迎屏幕)

一. 目标

WPF程序启动的时候,有时候我们需要设置一个启动画面(比如欢迎屏幕),或者是你在启动之前做一个提示,展示公司Logo的时候,可以设置一个启动画面.比如下面这种

启动画面

二. 使用技能

使用SplashScreen类来显示动画, SplashScreen类有两种显示启动画面的方式,第一种是自动关闭,一种是手动关闭启动画面.

① 自动关闭启动画面
namespace SplashSimple
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            // 显示启动画面
            ShowSplashScreen();
        }

        private void ShowSplashScreen()
        {
            // 这里要注意的点就是StartFlash.jpg 要设置为资源.
            SplashScreen splash = new SplashScreen(@"/Assets/Images/StartFlash.jpg");
            /*
             * 第一个参数表示是否自动关闭
             * 第二个参数表示启动画面窗口是否会被置于顶层,即使有其他程序的窗口处于活动状态,
             * 启动画面也会显示在它们之上.
             * 如果设置为false,表示遵循正常的窗口焦点规则,如果用户切换到其他程序,
             * 启动画面可能会被其他窗口遮挡.
             * 如果设置为true,保证用户一直能够看到它.
             */
            splash.Show(true, true);
        }
    }
}

从上面的代码中我明白了以下知识点:

  1. WPF中的资源: 图片设置为资源之后会被编译到应用程序的输出文件中,无论应用程序部署到哪里,凸显都会随之一起部署,减少了丢失文件或者路径问题的风险. 资源可以通过它们的路径名在代码中被访问,并且可以用相对路径的方式去访问.
  2. splash.Show(true,true)设置为自动关闭,自动关闭的时机: SplashScreen并没有一个固定的默认关闭时间,自动关闭的触发是基于应用程序主窗口的显示.也就是说,当你要显示你应用程序的主窗口一般来说是第一个窗口视图的时候,应用程序这个时候就会关闭启动画面.
② 手动关闭启动画面

应用场景: 如果你需要更精细的控制启动画面的关闭时机,你可以手动的调用Close()方法来关闭它.关闭这里也可以提供一个参数,表示多少时间以后进行关闭.

namespace SplashSimple
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            // 显示启动画面
            ShowSplashScreen();
        }

        private void ShowSplashScreen()
        {
            // 这里要注意的点就是StartFlash.jpg 要设置为资源.
            SplashScreen splash = new SplashScreen(@"/Assets/Images/StartFlash.jpg");
            /*
             * 第一个参数表示是否自动关闭
             * 第二个参数表示启动画面窗口是否会被置于顶层,即使有其他程序的窗口处于活动状态,启动画面也会显示在它们之上.
             * 如果设置为false,表示遵循正常的窗口焦点规则,如果用户切换到其他程序,启动画面可能会被其他窗口遮挡.
             * 如果设置为true,保证用户一直能够看到它.
             */
            splash.Show(false, true);

            // 这里执行一些数据初始化的代码
            Task.Run(() =>
            {
                // 模拟耗时操作
                Thread.Sleep(1000);

                // 在UI线程上关闭启动画面
                Dispatcher.Invoke(() =>
                {
                    // 这里会有一个淡淡渐渐消失的效果
                    splash.Close(TimeSpan.FromSeconds(2));
                });
            });
        }
    }
}

从上面的代码中我明白了以下知识点:

  1. 这里为什么要创建一个新的Task,作用就是避免UI线程阻塞.在WPF应用程序中,UI线程负责处理所有的用户界面元素,包括回执和事件响应.如果在UI线程中执行耗时操作(如数据加载或者初始化),它会导致界面冻结,从而影响用户体验.
  2. Thread.Sleep(1000) 表示当前Run的新线程休眠1000毫秒,这个阻塞期间,线程不会执行任何操作,也不会处理任何消息.如果是在UI线程上使用Thread.Sleep,那么UI线程会被挂起,导致整个UI变得无响应
  3. splash.Close(TimeSpanObject) 在一定的时间后,启动画面渐渐消失,注意这里有一个渐变效果,如果想要立马消失.可以使用splash.Close(TimeSpan.Zero)

相关推荐

  1. 2. WPF显示一个启动画面(欢迎屏幕)

    2024-04-11 15:18:03       13 阅读
  2. WPF】弹出一个弹窗并显示一个列表

    2024-04-11 15:18:03       42 阅读
  3. 树莓派外接上显示器以后一直黑屏无画面显示

    2024-04-11 15:18:03       70 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-11 15:18:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-11 15:18:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-11 15:18:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-11 15:18:03       18 阅读

热门阅读

  1. 缓存、分布式缓存、缓存的风险

    2024-04-11 15:18:03       14 阅读
  2. Linux下的链接文件

    2024-04-11 15:18:03       14 阅读
  3. linux SSH 服务管理命令

    2024-04-11 15:18:03       10 阅读
  4. 清空nginx缓存并强制刷新

    2024-04-11 15:18:03       10 阅读
  5. Bash 编程精粹:从新手到高手的全面指南之变量

    2024-04-11 15:18:03       14 阅读
  6. [Linux][shell][权限] shell原理简介 + 权限细节笔记

    2024-04-11 15:18:03       13 阅读
  7. 知识碎片随手记-1

    2024-04-11 15:18:03       14 阅读
  8. c# 实现Quartz任务调度

    2024-04-11 15:18:03       15 阅读
  9. MySQL:统计总条数时去重

    2024-04-11 15:18:03       14 阅读
  10. python时间&内存计算

    2024-04-11 15:18:03       12 阅读
  11. 自动驾驶涉及相关的技术

    2024-04-11 15:18:03       14 阅读
  12. 死锁以及如何避免死锁

    2024-04-11 15:18:03       15 阅读
  13. 如何理解JVM

    2024-04-11 15:18:03       14 阅读