UWP应用程序关闭时如何处理?

时间:2016-10-31 19:10:27

标签: uwp template10

有时我有一个打开的流或一个活动队列,在应用程序关闭时必须正确处理。在WPF应用程序中,我可以在应用程序上使用Unloading事件,但在UWP中我注意到这样的事件不存在。

我如何可靠地做到这一点?

PS:我正在使用Template 10框架。

1 个答案:

答案 0 :(得分:2)

在通用UWP应用程序中,了解应用程序正在关闭的唯一可靠方法是附加到应用程序类中的Suspending事件。要有效地执行此操作,您需要处理事件并以某种方式将此操作发送到视图模型中,您可以在其中关闭流或清除队列。

public App()
{
    this.InitializeComponent();
    this.Suspending += App_Suspending;
}

private void App_Suspending(Object sender, SuspendingEventArgs e)
{
    // close stream
}

在Template 10应用程序中,执行此操作的最佳方法是覆盖视图模型中的OnNavigatedFrom方法,并查看suspending参数是否为true。如果是,则表示您的应用程序正在关闭,现在是关闭流或清除队列的适当时间。不要乱用应用程序类。

public override Task OnNavigatedFromAsync(IDictionary<String, Object> pageState, Boolean suspending)
{
    if (suspending)
    {
        // close stream
    }
    return base.OnNavigatedFromAsync(pageState, suspending);
}

或者,如果您使用的模板10没有视图模型(100%支持),则Template 10应用程序类提供覆盖而不是要处理的事件。覆盖此方法并关闭您的流。

public override Task OnSuspendingAsync(Object s, SuspendingEventArgs e, Boolean prelaunchActivated)
{
    // close stream
    return base.OnSuspendingAsync(s, e, prelaunchActivated);
}

祝你好运。