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
C# 在onStartup完成之前,动画不会开始_C#_Wpf_Animation_Splash Screen - Fatal编程技术网

C# 在onStartup完成之前,动画不会开始

C# 在onStartup完成之前,动画不会开始,c#,wpf,animation,splash-screen,C#,Wpf,Animation,Splash Screen,我正在开发一个WPF,C应用程序 由于加载过程非常长,我们需要创建一个动画启动屏幕,以便在应用程序加载时显示 问题是所有初始化代码都在OnStartup方法中。 我注意到,在OnStartup完成之前,动画不会启动,因此我猜在应用程序启动结束之前,您无法显示任何动画 我的假设正确吗?如果是,是否有办法在启动完成之前显示动画,或者我应该将代码移到另一个地方?我不喜欢这样做,因为这将是应用程序流程中的一个巨大变化 编辑 我尝试使用一个新线程并使用dispatcher启动splash,但直到OnSta

我正在开发一个WPF,C应用程序

由于加载过程非常长,我们需要创建一个动画启动屏幕,以便在应用程序加载时显示

问题是所有初始化代码都在OnStartup方法中。 我注意到,在OnStartup完成之前,动画不会启动,因此我猜在应用程序启动结束之前,您无法显示任何动画

我的假设正确吗?如果是,是否有办法在启动完成之前显示动画,或者我应该将代码移到另一个地方?我不喜欢这样做,因为这将是应用程序流程中的一个巨大变化

编辑

我尝试使用一个新线程并使用dispatcher启动splash,但直到OnStartup完成后,dispatcher的调用才启动

你应该做:

protected override void OnStartup(StartupEventArgs e)
{
    //Start your animation here.

    Task.Factory.StartNew(() => 
    {
       //Start long loading operation here

       Application.Current.Dispatcher.Invoke(
          new Action(() => 
             { 
                //Stop your animation here
                //Note: it needs to run on the UI thread, so we dispatch it.
             })
       );
    }
}
你应该做:

protected override void OnStartup(StartupEventArgs e)
{
    //Start your animation here.

    Task.Factory.StartNew(() => 
    {
       //Start long loading operation here

       Application.Current.Dispatcher.Invoke(
          new Action(() => 
             { 
                //Stop your animation here
                //Note: it needs to run on the UI thread, so we dispatch it.
             })
       );
    }
}

使用动画创建一个新窗口。首先启动此窗口,然后在其启动时创建主窗口,并在加载主窗口后关闭第一个窗口。。您可以将“动画”窗口设置为“始终在顶部”,以防止主窗口覆盖动画。

使用动画创建新窗口。首先启动此窗口,然后在其启动时创建主窗口,并在加载主窗口后关闭第一个窗口。。您可以将动画窗口设置为始终在顶部,以防止主窗口覆盖动画。

加载过程是否在单独的线程中完成?加载过程是否在单独的线程中完成?我尝试过,问题是,dispatcher.Invoke在OnStartup完成之前也不会启动。OnStartup应在到达Task.Factory.StartNew后立即返回,因为它在单独的线程中运行。但OnStartup运行时应显示初始屏幕。所有沉重的逻辑都在OnStartUpport中。请注意我在示例中设置的注释。您的长时间加载操作应该在任务内部运行,因此启动时返回。加载不能在UI线程上运行,否则会冻结。谢谢!!!成功了!我没有听到那句话。。非常感谢你!我花了几个小时在这件愚蠢的事情上…我试过了,问题是dispatcher.Invoke也会在OnStartup完成之前启动。OnStartup应该在到达Task.Factory.StartNew时返回,因为它在单独的线程中运行。但是在OnStartup运行时应该显示初始屏幕。所有沉重的逻辑都在OnStartUpport中。请注意我在示例中设置的注释。您的长时间加载操作应该在任务内部运行,因此启动时返回。加载不能在UI线程上运行,否则会冻结。谢谢!!!成功了!我没有听到那句话。。非常感谢你!我花了好几个小时在这件蠢事上。。。