背景
我正在尝试将动画添加到WPF项目中的启动画面窗口。 (不使用实际的SplashScreen控件。我使用一个窗口。)
我实现启动画面的原因是因为数据加载导致应用程序打开时出现轻微延迟。显然,启动画面的目的是帮助用户体验,因此用户知道应用程序已被执行。
这是我当前方法背后的想法:
不幸的是,直到调用主父窗口的InitializeComponent()方法之后,启动屏幕中的动画才会启动; 这种情况基本上发生在我想要关闭启动画面窗口时。因此,动画是无用的,直到为时已晚才开始。
我的问题:
为什么在调用InitializeComponent()之前它没有动画?
我目前关于这种情况发生的理论是因为它的飞溅 屏幕正在主UI线程上打开。我是对的吗?
是否存在任何不涉及劫持控制权的变通办法 该程序并在新线程中生成splashscreen? (我不想要一个破解的解决方案)
是的,我确实浏览了这个网站很长一段时间,但却无法找到可行的解决方案。
答案 0 :(得分:1)
过去我采取了一些方法来解决这个问题,不过@HighCore在评论中也是正确的,关于你当前的问题
无论如何,这些解决方案归结为线程化,因为UI管道需要渲染,并且你不能在没有阻塞的情况下在UI线程上固有地做这些事情,特别是如果你想要动画。
答案 1 :(得分:1)
UI线程上的处理时间会阻止动画。没有真正的方法。
最好的方法是不要在UI线程上花费这么多时间加载和阻止。我建议您可以延迟加载绑定到UI元素的数据,直到初始加载之后。这样,InitializeComponents()不应该花这么长时间。
基本上,在初始化之后,所有绑定都不会向控件返回任何数据。此数据初始化最好在单独的线程上进行,然后在加载数据后进行通知。
这样可以让你的启动画面生动,你会有更多的快乐。