我有多个页面的应用程序,与navigateto逻辑连接。UWP页面生命周期
其中一个页面包含具有网络摄像机绑定的媒体元素。进入后台模式(例如,通过最小化应用程序思考点击系统菜单)后,摄像机元素停止。因此,我订阅了
Windows.ApplicationModel.Core.CoreApplication.LeavingBackground事件并重新初始化相机。如果当前页面是具有此订阅和相机元素的页面,则一切正常。如果当前页面是另一个页面,并且应用程序已恢复,则无论如何都会发生LeavingBackground此事件,因此隐藏页面会尝试重新初始化摄像机。
我试图设置this.NavigationCacheMode = NavigationCacheMode.Disabled,因此包含媒体元素和订阅LeavingBackground事件的页面实例在理论上必须根据MSDN在NavigatedTo事件之后进行处理。但是,这是我不了解的另一种方式。
看来,相机页面实例化一次,永远,并将永远收到LeavingBackgound事件 - 这对我来说很糟糕。
我试图比较Window.Current.Content.GetType()与包含相机元素的页面类型,但有时这种类型包含另一个页面的类型,但有时它与Content.Content一起移动,所以我卡住了。
这是我尝试过的解决方法之一,但我认为这不是优雅和正确的。我仍然不明白为什么页面不处理。 –
只要订阅静态事件(如LeavingBackground),您的页面就不会被处置,因为该静态事件处理程序会在其上保留一个活动引用。你可以通过使用内存诊断工具来查看。 –
这不是我的页面。这是你的设计,而不是优雅,真正的过于复杂。但我相信,你没有努力改变这一点。 –