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

Windows 8 为什么SystemTriggerType.NetworkStateChange会多次触发?,windows-8,background-process,Windows 8,Background Process,我正在Windows 8上的后台任务中检查网络状态的更改。您可以找到有关注册后台任务的确切详细信息 我已经注册了几个事件来测试哪一个最适合: BackgroundTaskManager.RegisterBackgroundTask( BackgroundTaskManager.NetworkTaskEntryPoint, Constants.NetworkAvailable, new SystemTrigger(SystemTriggerType.NetworkState

我正在Windows 8上的后台任务中检查网络状态的更改。您可以找到有关注册后台任务的确切详细信息

我已经注册了几个事件来测试哪一个最适合:

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:托管(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 (系统触发器)
  • 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次,Internet可用一次(这是正确的)

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

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;
}

我还尝试添加了一个getDeleral(),但由于没有异步代码,所以没有真正的问题。请注意,所有方法中的代码也是相同的,所有任务只注册一次。

这是正常的。网络状态不仅仅包括对互联网的访问。它涵盖了网络适配器可用性、wifi连接等方面的变化。如果您只想知道此时是否可以访问internet,请使用InternetAvailable触发器。问题是:如何知道internet是否已断开(在单个事件中)?触发器的数量也取决于正在执行的代码的大小。