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

How do I handle when a UWP application is closing?

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

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

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

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

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

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

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

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

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

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

祝你好运。