WPF动画不设置动画.(启动屏幕)



背景:

我正试图在WPF项目的启动屏幕窗口中添加一个动画。(没有使用实际的SplashScreen控件。我使用窗口。)

我实现启动屏幕的原因是,由于加载了数据,打开应用程序时会有一点延迟。显然,启动屏幕的目的是帮助用户体验,因此用户知道应用程序已经执行。

以下是我目前方法背后的想法:

  1. 在构造函数
  2. InitializeComponent()被调用
  3. 关闭防溅屏窗口

不幸的是,启动屏幕中的动画直到调用主父窗口的InitializeComponent()方法之后才开始这基本上发生在我无论如何都想关闭防溅屏窗口的时候。因此,动画是无用的,直到为时已晚才开始。

我的问题:

  1. 为什么在调用InitializeComponent()之后才设置动画?

  2. 我目前的理论是,这是因为飞溅屏幕正在主UI线程上打开。我说得对吗?

  3. 有没有不涉及劫持控制的解决方案程序并在新线程中生成splashscreen?(我不想要一个那么糟糕的解决方案)

是的,我确实浏览了这个网站很长一段时间,但找不到可行的解决方案。

UI线程上的处理时间会阻止动画。没有真正的办法。

最好的方法是不要在UI线程上花费太多时间加载和阻塞。我建议您可以将绑定到UI元素的数据的加载延迟到初始加载之后。这样,InitializeComponents()就不应该花费那么长时间。

基本上,在初始化之后,所有绑定都不应向控件返回任何数据。此数据初始化最好在单独的线程上进行,然后在加载数据后进行通知。

这将允许你的启动屏幕动画,你会有更多的乐趣。

我过去曾采取过一些方法来处理这一问题,尽管@HighCore在评论中对您当前的问题也是正确的

  • 在VisualBasic程序集中使用SplashScreen类
  • 使用WPF启动屏幕类

无论如何,这些解决方案可以归结为线程化,因为UI管道需要渲染,而且在没有阻塞的情况下,您无法在UI线程上固有地执行这些操作,特别是如果您想要动画的话。

最新更新