0

いくつかのステータス メッセージを表示できるスプラッシュ スクリーンを wpf アプリケーションに実装したいと考えていました。その方法についての良いチュートリアルを見つけました。

mvvm ツールキットを使用しています。私の App.xaml には、StartupUri が "View/Shell.xaml" に設定されています。これはすべてうまくいきます。ここで、StartupUri が「呼び出される」前にスプラッシュスクリーンを開始したいと考えています。

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' に値を指定すると、内部エラーで例外がスローされました: "{Locator} という名前のリソースが見つかりません

StartupUri を別の Window に変更すると、この Windows リソースも見つかりません。これは、startupobject を変更して app.run を自分で呼び出した場合にのみ発生します。スプラッシュスクリーンがなければ、すべてのリソースが問題なく見つかります。

それは私を夢中にさせているので、誰かがこれで私を助けてくれますか

前もって感謝します

4

1 に答える 1

0

メソッドを作成する代わりに、呼び出されるメソッドを作成Main()できます-override OnStartupbefore 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();
}
于 2013-03-27T17:35:15.427 に答える