2016-10-31 74 views
3

有時我有一個打開的流或活動隊列,當應用程序關閉時必須正確處理。在WPF應用程序中,我可以在應用程序中使用Unloading事件,但在UWP中,我注意到這樣的事件不存在。如何在UWP應用程序關閉時處理?

我該如何可靠地做到這一點?

PS:我正在使用模板10框架。

回答

2

在通用的UWP應用程序中,知道應用程序正在關閉的唯一可靠方法是附加到應用程序類中的Suspending事件。爲了有效地做到這一點,您需要處理事件並以某種方式將此操作發送到視圖模型中,您可以關閉流或清除隊列。

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

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

在模板10的應用程序做到這一點的最好辦法是重寫您的視圖模型的OnNavigatedFrom方法看,如果懸浮的說法是真實的。如果是,那麼你的應用程序正在關閉,這是合適的時間來關閉你的流或清除你的隊列。不要亂用應用程序類。或者,如果您使用的模板10沒有視圖模型(100%支持),則模板10應用程序類提供覆蓋而不是要處理的事件。覆蓋此方法並關閉您的流。

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

祝你好運。

+0

暫停!=正在關閉 – lindexi

+0

@lindexi - 我認爲第一句解決了這個問題。對於開發人員來說,與UWP相比差距很小。 –

+0

@lindexi即使你是對的,你也可能是錯的。當您的應用程序暫停時,會引發暫停事件。當你的應用程序關閉時,引發暫停事件。沒有可靠的區分方法。因此,您必須像關閉一樣處理暫停。 –

相關問題