恢复应用Windows Phone

时间:2014-11-20 22:10:50

标签: event-handling windows-runtime windows-phone-8.1

我有一个第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,因此相机初始化并且不是我的意思。

有没有办法只为页面添加暂停事件处理程序?

2 个答案:

答案 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.LoadedPage.Unloaded个事件:

public BasicPage1()
{
    this.InitializeComponent();

    this.Loaded += (s, e) =>
        {
            Application.Current.Resuming += ResumingMethod;
        };

 this.Unloaded += (s, e) =>
        {
            Application.Current.Resuming -= ResumingMethod;
        };
}