首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >棱镜与WinRT如何迫使一个新的开始时,恢复从终止?

棱镜与WinRT如何迫使一个新的开始时,恢复从终止?
EN

Stack Overflow用户
提问于 2013-10-18 22:20:40
回答 1查看 432关注 0票数 1

我正在构建一个WinRT应用程序,它使用邻近性,并直接使用WiFi进行对等通信。因此,当应用程序终止,然后继续运行时,我需要它重新启动(连接将关闭,没有用户交互就无法重新打开)。问题是,我继承应用程序的Prism MvvmAppBase类正在做一些事情,导致它试图从保存的状态(不存在)恢复,并且应用程序最终显示在最后一个屏幕上,但是没有ViewModel支持它,因此取决于视图,它只会处于没有响应或崩溃的状态。

我正在看这份指南,它说,除非有办法重新开始,但我似乎找不到真正的方法去做。http://msdn.microsoft.com/en-us/library/windows/apps/xx130647.aspx

我一直在App.cs文件中进行黑客攻击,试图让它正常工作。现在,除了统一容器和棱镜引导,以及挂起事件处理程序中对NavigationService.Suspending()的调用之外,NavigationService.Suspending文件中实际上什么都没有。

引导看起来是这样的,但是当应用程序从终止后恢复时,它就不会被调用。

代码语言:javascript
复制
    protected override async void OnLaunchApplication(LaunchActivatedEventArgs args)
    {
        await BootStrapper.Config(_container);
        await BootStrapper.RegisterPrismInstances(_container, NavigationService, SessionStateService, FlyoutService);
        NavigationService.Navigate("Main", null);
    }

如果有人曾经处理过这件事,并能为我指出正确的方向,我将非常感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 16:08:24

RestorableState终止后重新启动Prism WinRT应用程序时, Prism将尝试恢复应用程序状态,框架的导航堆栈和帧的状态将在终止之前恢复(这将导航到最后打开的页面,并尝试恢复视图模型中被标记为属性的任何属性)。

通过查看MvvmAppBase的源代码,您似乎可以尝试防止Prism保存/恢复应用程序状态:

  • 在App类中创建一个默认构造函数,清除挂起事件的处理程序。MvvmAppBase的默认构造函数注册到此事件,并在引发状态时保存状态。
  • 重写基类的OnLaunched方法。在它中,在执行基方法之后,检查前一个执行状态是否为终止的。如果是这样,您可以清除NavigationService的导航历史记录并导航到启动页面。但是,保存和恢复操作仍将执行,因此任何注册的服务仍将恢复到以前的状态。(这不能在OnLaunchApplication中执行,因为如果成功地恢复了应用程序的状态,则不会调用它。)
  • 此外,还可以尝试从MvvmAppBase类中完全删除此功能。但是,它与保存/恢复应用程序状态有关的大多数方法都是私有的,因此您最好删除MvvAppBase,将其全部代码复制到App类中并相应地进行编辑。

我没有尝试上面列出的任何方法,所以我不知道它们是否会产生任何问题,但它们可能会帮助您作为起点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19459942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档