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)。

所以我得到 NetworkStateChange 条件不可用 4 次,条件可用 4 次和 InternetAvailable 一次(这是正确的)。

在后台任务中,我只做以下代码进行测试:

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