2016-10-31 34 views
3

オープンストリームまたはアプリケーションが終了するときに適切に処理されるアクティブなキューがあることがあります。 WPFアプリケーションでは、アプリケーションでUnloadingイベントを使用できますが、UWPではそのようなイベントは存在しません。UWPアプリケーションが終了したときの処理方法を教えてください。

これを確実に行うにはどうすればよいですか?

PS:私はTemplate 10フレームワークを使用しています。

答えて

2

一般的なUWPアプリケーションでは、アプリケーションが終了することを知る唯一の信頼できる方法は、アプリケーションクラスのSuspendingイベントにアタッチすることです。これを効果的に行うには、イベントを処理し、ストリームを閉じたりキューをクリアしたりできるビューモデルに何らかの方法でこの操作をメッセージする必要があります。

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

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

テンプレート10のアプリケーションでこれを行うための最善の方法は、あなたのビューモデルにOnNavigatedFromメソッドをオーバーライドして、吊り引数がtrueの場合は見ています。そうであれば、アプリケーションは終了しています。ストリームを閉じるか、キューをクリアするのが適切な時期です。アプリケーションクラスを混乱させないでください。

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

あなたが100%サポートされているビュー・モデル、なしテンプレート10を使用している場合、あるいは、テンプレート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あなたが正しいとはいえ、間違っている可能性もあります。アプリケーションが中断されると、Suspendingイベントが発生します。アプリケーションが閉じられると、Suspendingイベントが発生します。差別化のための信頼できる方法はありません。その結果、[停止中]のように[停止中]を処理する必要があります。 –

関連する問題