首页 文章

UWP页面生命周期

提问于
浏览
3

我有多个页面的应用程序,与navigationto逻辑连接 .

其中一个页面包含带网络摄像头绑定的媒体元素 . 进入后台模式后(例如,通过最小化应用程序思想点击系统菜单),相机元素停止 . 所以,我订阅了
Windows.ApplicationModel.Core.CoreApplication.LeavingBackground事件并重新初始化摄像头 . 如果当前页面是具有此订阅和相机元素的页面,则一切正常 . 如果当前页面是另一个页面,并且应用程序已恢复,则LeavingBackground无论如何都会发生此事件,因此隐藏页面会尝试重新初始化相机 .

我试图设置this.NavigationCacheMode = NavigationCacheMode.Disabled,因此理论上必须在根据MSDN的NavigatedTo事件之后处理包含媒体元素和订阅LeavingBackground事件的页面实例 . 但是我不理解其他方式的工作 .

似乎相机页面实例化了一次,永远,并且将永远收到LeavingBackgound事件 - 这对我来说很糟糕 .

我试图将Window.Current.Content.GetType()与包含camera元素的页面类型进行比较,但有时这种类型包含其他页面的类型,但有时它会随Content.Content移动,所以我卡住了 .

2 回答

  • 3

    我假设您在离开该页面时必须取消注册事件处理程序:

    public sealed partial class WebCamPage
    {
        public WebCamPage()
        {
            InitializeComponent();
        }
    
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            Windows.ApplicationModel.Core.CoreApplication.LeavingBackground += OnLeavingBackground;
        }
    
        protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
        {
            Windows.ApplicationModel.Core.CoreApplication.LeavingBackground -= OnLeavingBackground;
        }
    
        private void OnLeavingBackground(object sender, LeavingBackgroundEventArgs e)
        {
            // Your code here.
        }
    }
    
  • 1

    您需要处理Suspending和Resuming事件以正确清理和重新初始化相机,就像相机示例应用程序中显示的那样:

    https://github.com/Microsoft/Windows-universal-samples/blob/master/Samples/CameraStarterKit/cs/MainPage.xaml.cs

    谢谢,Stefan Wick - Windows开发人员平台

相关问题