12

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

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

任何人都可以帮助我吗?

编辑1#

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

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

4

3 回答 3

29

我还没有在 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 上测试此代码片段时,它按预期工作。在我的手机仅在 WiFi 上启动时,我会看到以下消息框:

已连接的消息框

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

Disconnected MessageBox

于 2012-11-29T01:35:12.853 回答
18

试试这个:

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

}
于 2012-12-22T15:17:05.080 回答
2

在 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);     
}
于 2014-07-11T06:01:47.303 回答