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.
}
}
您需要处理挂起和恢复事件以正确清理和重新初始化相机,如相机示例应用中所示:
谢谢,
Stefan Wick - Windows 开发者平台
我有多个页面的应用程序,与 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.
}
}
您需要处理挂起和恢复事件以正确清理和重新初始化相机,如相机示例应用中所示:
谢谢, Stefan Wick - Windows 开发者平台