UWP 页面生命周期

UWP page lifecycle

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

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

我尝试设置 this.NavigationCacheMode = NavigationCacheMode.Disabled,因此根据 MSDN,理论上必须在 NavigatedTo 事件之后处理包含媒体元素和订阅 LeavingBackground 事件的页面实例。但这是我不明白的另一种方式。

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

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

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

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.
    }
}

您需要处理挂起和恢复事件以正确清理和重新初始化相机,如相机示例应用中所示:

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

谢谢, Stefan Wick - Windows 开发者平台