2013-03-27 32 views
0

我想在我的wpf应用程序中实现一个启动画面,在那里我可以显示一些状态消息。我找到了一个关于如何做的好教程。WPF资源不会在SplashScreen实现后加载

我正在使用mvvm工具包。 我的App.xaml的StartupUri设置为“View/Shell.xaml”。这一切工作正常。现在我想在StartupUri被“调用”之前启动Splashscreen。

在App.xaml.cs我实现这样的主要方法:

[STAThread()] 
    static void Main() 
    { 
     Splasher.Splash = new IPA.Merlin.View.ViewSplashScreen(); 
     Splasher.ShowSplash(); 

     for (int i = 0; i < 1000; i++) 
     { 
      MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); 
      Thread.Sleep(1); 
     } 

     new App(); 
    } 
    /// <summary> 
    /// 
    /// </summary> 
    public App() 
    { 
     StartupUri = new System.Uri("View/Shell.xaml", UriKind.Relative); 

     Run(); 
    } 

对于此运行,我不得不在项目首选项的startupobject改变这种主要方法。

所以现在我的Splashscreen被调用并显示测试消息,并且在此App()被调用之后。 我得到以下错误:在'System.Windows.StaticResourceExtension'提供值抛出一个异常与内部错误:“名称{定位器}的资源无法找到

如果我将StartupUri更改为另一个窗口,此窗口资源还没有找到。 仅当我改变startupobject,然后调用app.run自己。如果不闪屏的所有资源都没有发现问题的occours。

谁能帮我这个,因为它让我疯了

在此先感谢

回答

0

而不是创造Main()方法,你可以override OnStartup方法,该方法被调用before main window gets initialized (App.xaml.cs) -

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 

    Splasher.Splash = new IPA.Merlin.View.ViewSplashScreen(); 
    Splasher.ShowSplash(); 

    for (int i = 0; i < 1000; i++) 
    { 
     MessageListener.Instance.ReceiveMessage(string.Format("Load module {0}", i)); 
     Thread.Sleep(1); 
    } 

    Splasher.CloseSplash(); 
} 
+0

我想这一点,但OnStartup事件似乎并不火。我用断点检查了这个。我也尝试设置一个新的启动功能,但VS告诉我没有“Application_Startup”的定义。有任何想法吗? – StefanG 2013-04-04 12:02:17

+0

您需要将此方法放在'App'类中,并确保您移除了静态'Main'方法,因为您的应用程序只能有一个入口点。 – 2013-04-04 16:32:39