UWP 页面生命周期

标签 uwp win-universal-app windows-10-universal uwp-xaml

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

其中一个页面包含带有网络摄像头绑定(bind)的媒体元素。进入后台模式后(例如,通过最小化应用程序思想单击系统菜单),相机元素停止。所以,我订阅了
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.
    }
}

关于UWP 页面生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422637/

相关文章:

c# - GZIPStream 压缩总是返回 10 个字节

audio - AudioGraph.CreateFileInputNodeAsync导致WAV和AudioNodeEmitter产生FormatNotSupported

vb.net - 使用MessageDialog弹出UWP-VB错误消息

c# - WebView - 在每个请求上定义 User-Agent

c# - 根据自定义属性 UWP 禁用某些 ListViewItem

c# - 将其引用添加到我的项目后无法使用 Bytescout

windows-10 - 无法在 Release模式下构建 UWP

c# - 如何在 Windows Phone 8.1 通用应用程序中使用新的动态磁贴模板更改磁贴标题?

listview - Windows Store 应用程序在 ListView 之间拖放

c# - 如何从 winform 启动 Windows 通用应用程序