如何在基于WPF Prism的应用程序中使用.NET 4 SplashScreen?

时间:2011-10-16 19:07:36

标签: c# .net wpf prism

我正在尝试在基于Prism的WPF应用程序中使用.NET 4 SplashScreen。我通过将图像上的构建操作设置为SplashScreen来使用SpashScreen。

用于继续使用System.Resources.MissingManifestResourceException崩溃的应用程序。最后我发现如果我在App.Xaml文件中添加一个StartupUri =“MainWindow.xaml”,SplashScreen就能正常工作。

 <Application x:Class="Application"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       StartupUri="MainWindow.xaml">
 </Application>

但是在prism应用程序中,我们不能拥有StartupUri。一切都在Bootstrapper中完成。

那么我需要手动操作StartupUri才能使SplashScreen工作?

更新1:完整的异常消息为:

  

System.Resources.MissingManifestResourceException未处理

     

消息=无法找到适合指定文化或中性文化的任何资源。确保   “Application.g.resources”已正确嵌入或链接到   汇编“应用程序”在编译时,或所有卫星   所需的装配是可装载和完全签名的。

更新2: 我已经想通了添加或删除StartupUri并不重要。重要的是我在App.Resources标记中有一个额外的WPF窗口(App.xaml除外)或2个虚拟条目。

<Application.Resources>
   <Style x:Key="Dummy"/>
   <Style x:Key="Dummy1"/>
</Application.Resources>

如果我不这样做,Application.g.resources文件不会在obj文件中创建,因此不会嵌入到可执行文件中。 这个blog post提醒我注意添加两个虚拟资源条目。

更新3:

Bob Bob在MSDN论坛here上回答了我的问题。肯特也试图让我指向同一个方向。

不要将图像的构建操作设置为SplashScreen。代替:

  

将App OnStartup方法中的代码添加为:

protected override void OnStartup(StartupEventArgs e)
{
  SplashScreen splashScreen = new SplashScreen("splashscreen.png");
  splashScreen.Show(true);

  base.OnStartup(e);
  Bootstrapper bootstrapper = new Bootstrapper();
  bootstrapper.Run();
}
  

“splashscreen.png”是项目中的一个图片,其“构建操作”   是“资源”。

2 个答案:

答案 0 :(得分:1)

只需定义自己的入口点,首先显示启动画面,然后启动Prism。在项目属性中,将入口点设置为自定义入口点。

internal static class Entry
{
    public static void Main(string[] args)
    {
        var splashScreen = ...;
        splashScreen.Show();

        var bootstrapper = ...;
        bootstrapper....;
    }
}

答案 1 :(得分:0)

请查看此地址:http://prismsplashscreen.codeplex.com/ prizm有一个完整的例子