Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF动画不设置动画。(启动屏幕)_C#_Wpf - Fatal编程技术网

C# WPF动画不设置动画。(启动屏幕)

C# WPF动画不设置动画。(启动屏幕),c#,wpf,C#,Wpf,背景: 我正试图在我的WPF项目中向闪屏窗口添加动画。(不使用实际的SplashScreen控件。我使用窗口。) 我实现启动屏幕的原因是,由于加载数据,打开应用程序时会有一点延迟。显然,启动屏幕的目的是帮助用户体验,因此用户知道应用程序已经执行 以下是我当前方法背后的想法: 在屏幕开始处实例化splashscreen窗口 构造器 调用InitializeComponent() 关闭防溅玻璃窗 不幸的是,在调用主父窗口的InitializeComponent()方法之前,启动屏幕中的动画不会启动这

背景:

我正试图在我的WPF项目中向闪屏窗口添加动画。(不使用实际的SplashScreen控件。我使用窗口。)

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

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

  • 在屏幕开始处实例化splashscreen窗口 构造器
  • 调用InitializeComponent()
  • 关闭防溅玻璃窗
  • 不幸的是,在调用主父窗口的InitializeComponent()方法之前,启动屏幕中的动画不会启动这基本上是在我想关闭splashscreen窗口时发生的。因此,动画是无用的,直到太晚才开始

    我的问题:

  • 为什么在调用InitializeComponent()之前它不会动画

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

  • 有没有不涉及劫持控制的变通办法 程序和在新线程中生成splashscreen?(我不想要一个如此草率的解决方案)


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

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


    不管怎样,这些解决方案归结为线程,因为UI管道需要渲染,并且您无法在UI线程上执行这些操作而不阻塞,特别是如果您想要动画的话。

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

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

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


    <>这会让你的飞溅屏幕动画化,你会有更多的乐趣。

    你为什么考虑在不同的线程中创建一个破解屏幕?事实并非如此。当你的UI很重并且需要时间加载时,它实际上是你唯一的解决方案。无论如何,你需要确保你首先在后台线程中加载数据,这可能会减轻UI线程,并允许你在数据准备好之前显示启动屏幕一段时间,至少。它没有动画的原因是UI线程正忙着做你的事情,没有时间做动画。释放UI线程或在其他线程中创建初始屏幕。