【问题标题】:Windows Phone 8 Connection Handler / Internet AvailabilityWindows Phone 8 连接处理程序/互联网可用性
【发布时间】:2012-11-17 00:13:15
【问题描述】:

我的团队正在开发一个团队项目应用程序。目前,我们需要一个事件处理程序来检查连接状态(如果它是开/关的)。

我对 System.Net.NetworkInformation 命名空间寄予厚望,但不幸的是 wp8 不支持最重要的事情。

谁能帮帮我?

编辑 1#

看来,我没有很好地说明我的问题。 我正在使用 Mvvm 灯光表达式,它不支持该命名空间,或者至少我无法添加它。

我是使用 VS 和 c# atm 的新手,可能我做错了什么,但只是当我尝试将引用添加到我的项目时它没有列出。

【问题讨论】:

    标签: windows-phone-8


    【解决方案1】:

    我没有在 WP8 上尝试过 System.Net.NetworkInformation 命名空间。但是新的 WP8 Windows.Networking.Connectivity Windows Phone 运行时命名空间工作得很好。

    使用 Windows.Networking.Connectivity.NetworkInformation.NetworkStatusChanged 了解网络条件何时发生变化,并使用 Microsoft.Phone.Net.NetworkInformation.NetworkInterface 属性或 Windows.Networking.Connectivity.NetworkInformation 属性查看发生了什么。

        private async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            PrintNetworkStatus();
    
            NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged;
        }
    
        void NetworkInformation_NetworkStatusChanged(object sender)
        {
            PrintNetworkStatus();
        }
    
        private void PrintNetworkStatus()
        {
            Dispatcher.BeginInvoke(() =>
            MessageBox.Show(NetworkInterface.NetworkInterfaceType +
                            Environment.NewLine +
                            NetworkInterface.GetIsNetworkAvailable()));
        }
    

    当我在我的 WP8 Lumia 920 上测试此代码 sn-p 时,它按预期工作。在我的手机仅在 WiFi 上启动时,我会看到以下消息框:

    一旦我关闭我的 WiFi 路由器并且手机上的 WiFi 连接丢失,我会看到以下消息框:

    【讨论】:

    • 我试过了,它适用于 WP8 项目,但不适用于 Mvvm 轻项目
    • 我不清楚“MVVM Light 项目”是什么。 AFAIK 它只是原始项目模板的派生。也许最好从一个 WP8 新项目开始,然后将所需的任何第三方组件和架构添加到该项目中。
    【解决方案2】:

    试试这个:

    bool isNetwork=NetworkInterface.GetIsNetworkAvailable();
    if(!isNetwork)
    {
       //proceed with your code
    
    }
    

    【讨论】:

      【解决方案3】:

      在 App.xaml.cs 中,创建如下所示的属性

      /// <summary>
      /// check if network is available
      /// </summary>
      public bool IsNetworkAvailable
      {
          get
          {
              return NetworkInterface.NetworkInterfaceType != NetworkInterfaceType.None;
          }
      }
      

      您可以在项目中的任何地方使用此属性,如下代码所示

      if (((App) Application.Current).IsNetworkAvailable)
      {
               //Lines of Code
      }
      else
      {
           MessageBox.Show("Not Connected to Network!", "Checking Connection!",
                     MessageBoxButton.OK);     
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多