0

Windows 8 のバックグラウンド タスクでネットワーク状態の変化を確認しようとしています。msdnでバックグラウンド タスクの登録に関する正確な詳細を確認できます。

どれが最適かをテストするために、いくつかのイベントを登録しました。

BackgroundTaskManager.RegisterBackgroundTask(
    BackgroundTaskManager.NetworkTaskEntryPoint,
    Constants.NetworkAvailable,
    new SystemTrigger(SystemTriggerType.NetworkStateChange, false),
    new SystemCondition(SystemConditionType.InternetAvailable));
BackgroundTaskManager.RegisterBackgroundTask(
    BackgroundTaskManager.NoNetworkTaskEntryPoint,
    Constants.NetworkUnAvailable,
    new SystemTrigger(SystemTriggerType.NetworkStateChange, false),
    new SystemCondition(SystemConditionType.InternetNotAvailable));
BackgroundTaskManager.RegisterBackgroundTask(
    BackgroundTaskManager.InternetTaskEntryPoint,
    Constants.InternetAvailable,
    new SystemTrigger(SystemTriggerType.InternetAvailable, false),
    null);

テストするために、フライトモードを有効にして無効にします。次のイベント (システムトリガー/条件) を取得します。

  • NetworkStateChange/InternetNotAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。
  • NetworkStateChange/InternetNotAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。
  • NetworkStateChange/InternetNotAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。
  • NetworkStateChange/InternetNotAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。
  • NetworkStateChange/InternetAvailable InternetAvailable (SystemTrigger)
  • NetworkStateChange/InternetAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。
  • NetworkStateChange/InternetAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。
  • NetworkStateChange/InternetAvailable
  • プログラム '[xxx] backgroundTaskHost.exe: Managed (v4.0.30319)' はコード 1 (0x1) で終了しました。

そのため、条件 Unavailable で 4 回、条件 Available で 4 回、InternetAvailable で 1 回 (正しい) の NetworkStateChange を取得しています。

バックグラウンド タスクでは、次のコードをテストするだけです。

public void Run(IBackgroundTaskInstance taskInstance)
{
    // keep track that we're no longer connected
    Debug.WriteLine("Background " + taskInstance.Task.Name + " Starting...");
    ApplicationData.Current.LocalSettings.Values[BackgroundTaskManager.NetworkConnectedKey] = true;
}

GetDeferral() も追加しようとしましたが、非同期コードがないため、実際の問題はありません。すべてのメソッドのコードも同じであり、すべてのタスクが一度だけ登録されることに注意してください。

4

0 に答える 0