有时我有一个打开的流或一个活动队列,在应用程序关闭时必须正确处理。在WPF应用程序中,我可以在应用程序上使用Unloading事件,但在UWP中我注意到这样的事件不存在。
我如何可靠地做到这一点?
PS:我正在使用Template 10框架。
答案 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);
}
祝你好运。