0

我在启动 Windows 应用商店应用时遇到问题。当我使用“关闭应用程序手势”(从上到下滑动应用程序)然后非常快速地再次启动应用程序时,有时会出现一个空白黑屏,当我单击它时,会出现开始菜单,并出现“ 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 回答