0

WindowsStoreアプリの起動に問題があります。「アプリを閉じるジェスチャ」(アプリを上から下にスライド)を使用して、アプリを非常に高速に再起動すると、空白の黒い画面が表示されることがあり、それをクリックすると、[スタート]メニューが表示され、「 MoAppHang」イベントがログに記録されます。

私のApp_Launchedイベントコードはここにあります:

       protected override async void OnLaunched(LaunchActivatedEventArgs args)
    {
        if (args.PreviousExecutionState == ApplicationExecutionState.Terminated )
        {
            // Restore the saved session state only when appropriate
            await SuspensionManager.RestoreAsync();                
        }


        // Do not repeat app initialization when already running, just ensure that
        // the window is active
        if (args.PreviousExecutionState == ApplicationExecutionState.Running)
        {
            if (!string.IsNullOrEmpty(args.Arguments))
            {
                Frame f = Window.Current.Content as Frame;
                if (f != null)
                {
                    UseSecondaryTileNavigation(f, args.Arguments);
                }
            }
            Window.Current.Activate();
            return;
        }

        Frame rootFrame;
        if (Window.Current.Content == null)
        {

            // Create a Frame to act as the navigation context and associate it with
            // a SuspensionManager key
            rootFrame = new Frame();
            SuspensionManager.RegisterFrame(rootFrame, "AppFrame");
        }
        else
        {
            rootFrame = (Frame)Window.Current.Content;
        }

        if (!await DatabaseHelper.ExistsDatabase())
        {
            await DatabaseHelper.CreateDatabase();
        }

        if (rootFrame.Content == null)
        {
            // When the navigation stack isn't restored navigate to the first page,
            // configuring the new page by passing required information as a navigation
            // parameter
            if (!rootFrame.Navigate(typeof(ItemsPage), "AllGroups"))
            {
                throw new Exception("Failed to create initial page");
            }
        }

        if (!string.IsNullOrEmpty(args.Arguments))
        {
            UseSecondaryTileNavigation(rootFrame, args.Arguments);
        }

        // Place the frame in the current Window and ensure that it is active
        if (Window.Current.Content == null)
        {
            Window.Current.Content = rootFrame;
        }
        Window.Current.Activate();

UseSecondaryTileNavigationは、ユーザーがセカンダリタイルを使用してアプリを開いたときにナビゲーションを実行します(基本的にはFrameパラメーターを使用し、Frame.Navigateを使用して正しい場所にナビゲートします)。

どこが間違っているのですか?

皆さん、ありがとうございました!

4

1 に答える 1

0

起動ハンドラーで少し時間のかかる作業を行う可能性があるようです。私が最初に提案するのは、カスタムのスプラッシュスクリーン手法を使用することです。つまり、OnLaunchedハンドラーWindow.Current.Contentでウィンドウを設定してアクティブ化し、できるだけ早くそのメソッドを終了してみてください。読み込みの進行状況バーを表示するだけのページに設定Window.Current.Contentし、そこで実際の読み込みロジックを処理することができます。

次に注目するのは、アプリがまだ一時停止しているときにアプリを起動するとどうなるかということです。(サスペンドハンドラーはありますか?)前のサスペンド/クローズが完了する前に(再)起動された場合、アプリはケースを処理できますか?

アプリが完全に閉じるまでに通常は数秒かかるようです(ドラッグダウンジェスチャを使用してアプリを閉じても)。

于 2012-07-20T00:05:01.547 に答える