2016-03-06 107 views
0

我正在开发一个使用Microsoft乐队的UWP模板10(汉堡)应用程序,我认为我已经完成了很多工作,因为我已将所有服务绑定到乐队(通过类库项目),并在屏幕上完美更新值。 然后我开始测试应用程序的简历,并遇到了一个问题。 当我重新启动一个应用程序时,用户将被带回值页面,但值不再更新。 基本上与乐队的连接似乎仍然有效,但readchanged空洞不再有效。Template10在应用程序暂停后继续运行服务

所以我在MainPageViewModel的OnNavigatedFromAsync方法中添加了代码来停止所有的服务没有问题。 但后来我发现,当恢复OnNavigatedToAsync方法不会被解雇,所以我不能解决如何重新启动所有的服务。

我也尝试在app.xaml.cs中添加OnResuming和OnSuspendingAsync的覆盖,但是随后无法解决如何从MainPageViewModel调用方法。 有没有正确的方法来处理这样的事情使用Template10?

回答

1

我假设您在Visual Studio中使用Simulation Dashboard控件来暂停然后恢复您的应用程序。那么,请不要使用简历按钮。它没有按预期工作。要测试应用程序的恢复,请使用暂停按钮,然后从乐队的界面中打开它(而不是使用恢复按钮)。 OnNavigatedToAsync方法应该很好地触发。

更新: 根据以下回答的讨论,我提供了关于以下几行的更新答案。

设置静态视图模型属性在App类,像这样:

public static TypeOfMyViewModel MyViewModel; 

然后,在TypeOfMyViewModel构造函数中添加以下行来设置值属性:

public TypeOfMyViewModel() 
{ 
    App.MyViewModel = this; 
} 

最后,在OnResuming方法中,只需调用ViewModel中的一个方法,该方法将恢复您的服务,如下所示:

public override void OnResuming(object s, object e, AppExecutionState previousExecutionState) 
{ 
    MyViewModel.ResumeServices(); 
} 
+0

好吧有趣,我一直在使用简历选项是。正如你所说,使用生命周期中的简历事件不会调用OnNavigatedToAsync。然而,它仍然没有像预期的那样工作。如果我暂停应用程序,然后从开始菜单重新启动它,然后我可以捕获OnNavigated到异步并重新启动一切,然后我的值再次开始更新,很棒:)但是,如果我尝试并通过使用任务列表恢复(长期保留在后面箭头)事件仍然不会启动并且服务不再启动.. – BGTurner

+0

啊,对不起,你是对的,它不会启动。不过,我认为当应用程序暂停时,您不应该停止您的服务。根据[开发人员指南到Windows 10](https://mva.microsoft.com/en-US/training-courses/a-developers-guide-to-windows-10-12618),应用程序生命周期,Windows将会为你做那个。在你回到应用程序后,你的代码应该恢复。所有异步调用在暂停之前开始将返回一个错误。有关详细信息,请参阅约12分钟的视频。 –

+0

是的,我并不期望必须停止所有的服务,这就是我最终试图让所有事情一旦恢复运行的地方。对于乐队来说,没有任何异步呼叫是我不认为的。你启动一个异步命令来启动它们,例如'await _bandClient.SensorManager.RRInterval.StartReadingsAsync();'然后你只是听带子上升事件'_bandOperator.EventRRIntervalChanged + = _bandOperator_EventRRIntervalChanged;'在恢复这些事件之后,如果不再调用第一段代码,就不会再发生。 – BGTurner

1

当您通过Windows平台或通过Visual Studio暂停和恢复应用程序时,恢复操作超快,因为它只是一个内存交换。在这种情况下,您的应用程序通常不会知道您的应用程序已被暂停。此操作的一个示例可能是您的用户接到电话,然后返回到您的应用程序。使用模板10,您的视图模型INav方法肯定不会被调用,因为您的应用程序的状态没有改变。如果您必须知道它已被暂停并正在恢复,那么您可以在应用程序的Application/Bootstrapper中点击OnResuming覆盖。取决于你需要完成什么,你可能需要通过一个全局静态事件公开这个操作,这样你的视图模型可以以某种方式处理它。

在Visual Studio中使用调试位置,然后您可以Suspend and Shutdown这也将暂停您的应用程序,但会将其恢复状态从PreviousExecutionState =运行到终止。在这种情况下,你的应用当然不会记忆,当然也不会处于相同的状态。它正在重新启动,并且在此过渡期间模板10会启动以恢复您的导航状态,设置以及其他一切。它也会调用你的视图模型的INAV覆盖像NavTo和NavFrom。

但要小心。引导程序的OnResuming也将在此操作期间调用。对你来说幸运的是,之前的状态被传递给这个覆盖,你可以在你的调用代码中无缝处理这个独特的情况。

有意义吗?

祝你好运。

+0

是的,我认为我主要是通过广泛的调试和映射整个过程来了解它是如何工作的,我只是在实际执行该部分时遇到问题:_如果您必须知道它已被暂停并正在恢复,那么您可以在应用程序的Application/Bootstrapper中点击OnResuming覆盖。取决于你需要完成什么,你可能需要通过一个全局静态事件来公开这个操作,这样你的视图模型可以以某种方式处理它._除了web开发之外,任何事情都很绿色,这是我第一次真正尝试一个应用程序,windows 10,并且乐队一起学习很多东西..:D – BGTurner

相关问题