我有一个第1页和第2页的应用,第2页仅使用NavigationCacheMode.Required
实例化了一次。
在第2页中,我使用相机,所以每当我导航到应用程序的其他页面或暂停应用程序时,我需要将相机拍摄并稍后重新打开。
因此我使用:
Application.Current.Resuming += ResumingMethod;
private async void ResumingMethod(Object sender, Object e)
{
Debug.WriteLine("RESUMING METHOD");
// instantiated the Camera
await this.Initialize();
}
第1页和第2页之间的导航工作正常,我可以暂停第2页的应用程序并恢复它,没有任何问题。但是当我从第2页导航到第1页,暂停应用程序并恢复它时,在第1页中调用ResumingMethod,因此相机初始化并且不是我的意思。
有没有办法只为页面添加暂停事件处理程序?
答案 0 :(得分:3)
您可以在Page2课程中执行以下操作:
public Page2()
{
this.InitializeComponent();
Application.Current.Resuming += Application_Resuming;
}
void Application_Resuming(object sender, object e)
{
if (Frame.Content == this)
createCamera();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// This will be executed when you navigate to this page
// but not when resuming the app from the suspended state
// (unlike on Windows 8.1).
createCamera();
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
// This will be executed when you navigate away from this page
// as well as if the application is suspended.
disposeCamera();
}
另一种方式:
public Page2()
{
this.InitializeComponent();
this.Loaded += Page2_Loaded;
this.Unloaded += Page2_Unloaded;
}
void Page2_Loaded(object sender, EventArgs e)
{
Application.Current.Suspending += Application_Suspending;
Application.Current.Resuming += Application_Resuming;
createCamera();
}
void Page2_Unloaded(object sender, EventArgs e)
{
Application.Current.Suspending -= Application_Suspending;
Application.Current.Resuming -= Application_Resuming;
disposeCamera();
}
void Application_Suspending(object sender, SuspendingEventArgs e)
{
disposeCamera();
}
void Application_Resuming(object sender, object e)
{
createCamera();
}
这种方式更好,因为当页面不可见时,您取消订阅暂停/恢复事件。
答案 1 :(得分:2)
如果您希望恢复/暂停特定于某个网页,我认为您可以使用Page.Loaded和Page.Unloaded个事件:
public BasicPage1()
{
this.InitializeComponent();
this.Loaded += (s, e) =>
{
Application.Current.Resuming += ResumingMethod;
};
this.Unloaded += (s, e) =>
{
Application.Current.Resuming -= ResumingMethod;
};
}