バックグラウンド タスクの進行状況と完了を監視する方法 (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
バックグラウンド タスクから報告される進行状況と完了をアプリから認識する方法について説明します。 バックグラウンド タスクは、アプリから切り離され、個別に実行されますが、バックグラウンド タスクの進行と完了の状況をアプリ コードによって監視することができます。これを行うために、アプリでは、システムに登録されたバックグラウンド タスクのイベントを受信登録します。
理解しておく必要があること
テクノロジ
必要条件
- このトピックでは、アプリで既にバックグラウンド タスクが登録されていることを前提とします。バックグラウンド タスクを直ちに構築する場合は、「クイック スタート: バックグラウンド タスクの作成と登録」をご覧ください。条件とトリガーについて詳しくは、「バックグラウンド タスクによるアプリのサポート」をご覧ください。
手順
ステップ 1:
バックグラウンド タスク完了のイベント ハンドラーにアタッチされる関数を作ります。この関数には BackgroundTaskCompletedEventArgs オブジェクトを指定し、他のパラメーターは指定しないようにする必要があります。
関数をローカルに登録する場合は、次のフットプリントを使うことができます。
function OnCompleted(args) { // TODO: Add code that deals with background task completion. }
そして、次のように BackgroundTaskRegistration オブジェクト (成功した Register 関数呼び出しによって取得) を使って関数を登録できます。
backgroundTaskRegistration.addEventListener("completed", onCompleted);
バックグラウンド タスクの完了を処理するコードを追加する必要があります。
たとえば、バックグラウンド タスクのサンプルでは、LocalSettings に保存された完了状態により、UI が更新されます。
function OnCompleted(args) { // // // backgroundTaskName = this.name; // // Call a method to update the UI (beyond the scope of this example). // UpdateUI(); }
堅牢なアプリでは、CheckResult を呼び出すことにより、バックグラウンド タスクからスローされた例外をチェックできます。
バックグラウンド タスクのサンプル メソッドを次のように変更することで、バックグラウンド タスクからスローされた例外を処理できます。
function OnCompleted(task, args) { var settings = ApplicationData.Current.LocalSettings; var key = task.TaskId.ToString(); try { args.CheckResult(); BackgroundTaskSample.SampleBackgroundTaskStatus = settings.Values[key].ToString(); } catch (Exception ex) { BackgroundTaskSample.SampleBackgroundTaskStatus = "Error: " + ex.Message; } UpdateUI(); }
ステップ 2:
完了したバックグラウンド タスクを処理するイベント ハンドラー関数を作ります。このコードは、IBackgroundTaskRegistration オブジェクトと BackgroundTaskProgressEventArgs オブジェクトを受け入れる特定のフットプリントに従っている必要があります。
OnProgress バックグラウンド タスク イベント ハンドラー メソッドには次のフットプリントを使います。
function OnProgress(task, args) { // TODO: Add code that deals with background task progress. }
バックグラウンド タスクの完了を処理するイベント ハンドラーにコードを追加します。
たとえば、バックグラウンド タスクのサンプルでは、args パラメーターで渡された進行状態により、UI が更新されます。
function OnProgress(task, args) { var progress = "Progress: " + args.Progress + "%"; BackgroundTaskSample.SampleBackgroundTaskProgress = progress; UpdateUI(); }
ステップ 3:
新規のバックグラウンド タスクと既存のバックグラウンド タスクと共に、イベント ハンドラー関数を登録します。
アプリで初めてバックグラウンド タスクを登録するときは、フォアグラウンドでまだアプリがアクティブになっていてタスクか実行されている場合に、進行状況と完了の更新を受け取ることができるように登録する必要があります。
たとえば、バックグラウンド タスクのサンプルでは、登録するバックグラウンド タスクごとに次の関数を呼び出します。
function AttachProgressAndCompletedHandlers(IBackgroundTaskRegistration task) { task.Progress += new BackgroundTaskProgressEventHandler(OnProgress); task.Completed += new BackgroundTaskCompletedEventHandler(OnCompleted); }
アプリが起動された時点、またはバックグラウンド タスクの状態が関連する新しいページに移動した時点で、現在登録されているバックグラウンド タスクの一覧を取得し、進行状況と完了に対応するイベント ハンドラー関数に関連付ける必要があります。アプリケーションで現在登録されているバックグラウンド タスクの一覧は、BackgroundTaskRegistration.AllTasks プロパティで保持されます。
たとえば、バックグラウンド タスクのサンプルでは、次のコードを使って SampleBackgroundTask ページの移動時にイベント ハンドラーをアタッチします。
function OnNavigatedTo(NavigationEventArgs e) { foreach (var task in BackgroundTaskRegistration.AllTasks) { if (task.Value.Name == BackgroundTaskSample.SampleBackgroundTaskName) { AttachProgressAndCompletedHandlers(task.Value); BackgroundTaskSample.UpdateBackgroundTaskStatus(BackgroundTaskSample.SampleBackgroundTaskName, true); } } UpdateUI(); }