2013-10-29 269 views
0

我想让SplashScreenService启动并运行。它确实显示我的飞溅屏幕,但它不会关闭,永远不会。SplashScreenService不起作用,因为我想

我有这样的代码在app.xaml.cs:

protected override void OnStartup(StartupEventArgs e) 

{ 

ServiceLocator.Default.RegisterTypeIfNotYetRegistered<ISplashScreenService, SplashScreenService>(); 

var splashScreenService = ServiceLocator.Default.ResolveType<ISplashScreenService>(); 
      splashScreenService.Enqueue(new ActionTask("Task1", tracker => Thread.Sleep(2000))); 

splashScreenService.Commit<SplashScreenViewModel>(); 

base.OnStartup(e); 

} 

任何人可以帮助我什么,我做错了什么?

回答

1

好像你正在阻塞UI线程,请尝试用这种方式:

public partial class App 
{ 
    #region Methods 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 
     var splashScreenService = ServiceLocator.Default.ResolveType<ISplashScreenService>(); 
     splashScreenService.Enqueue(new ActionTask("Task1", tracker => Thread.Sleep(2000))); 
     splashScreenService.Enqueue(new ActionTask("Task2", tracker => Thread.Sleep(2000))); 
     splashScreenService.Enqueue(new ActionTask("Task3", tracker => Thread.Sleep(2000))); 
     splashScreenService.CommitAsync(); 
    } 

    #endregion 
} 

或自定义开机画面

public partial class App 
{ 
    #region Methods 

    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 
     var splashScreenService = ServiceLocator.Default.ResolveType<ISplashScreenService>(); 
     splashScreenService.Enqueue(new ActionTask("Task1", tracker => Thread.Sleep(2000))); 
     splashScreenService.Enqueue(new ActionTask("Task2", tracker => Thread.Sleep(2000))); 
     splashScreenService.Enqueue(new ActionTask("Task3", tracker => Thread.Sleep(2000))); 
     splashScreenService.CommitAsync<SplashScreenViewModel>(); 
    } 

    #endregion 
} 
+0

感谢,例如1确实会导致异常:无法设置Owner属性到以前未显示的窗口。 示例2简要显示了初始屏幕和第二个主屏幕。几秒钟后,闪屏和主屏幕自动关闭。 我正在寻找一个解决方案来显示splashscreen,做一些初始化的东西,初始化后我想加载主屏幕,当主屏幕加载时,关闭splashscreen。 这可能吗? – user2932373

+0

对于我使用3.7稳定版本的例子。对的,这是可能的。此功能涵盖了这种情况。 –

相关问题