为什么SystemTriggerType.NetworkStateChange会多次触发?

时间:2013-01-28 15:34:07

标签: windows-8 background-process

我正在尝试检查Windows 8后台任务中的网络状态更改。您可以找到有关注册后台任务的确切详细信息on 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);

测试我启用飞行模式并禁用它。我得到以下事件(systemtrigger / condition):

  • 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(),但由于没有异步代码,因此没有真正的问题。请注意,所有方法中的代码也相同,并且所有任务仅注册一次。

0 个答案:

没有答案