C# 如何确定设备网络名称和连接性

C# 如何确定设备网络名称和连接性,c#,windows-phone-8,C#,Windows Phone 8,我一直在引用MSDN上的一个示例,该示例允许我确定网络更改和网络属性,例如网络名称、状态等。但是在网络更新发生之前,我如何获得相同的信息?例如,当我的应用程序加载时,未检测到网络更改,因此信息当前为空。我是否可以在导航页面时强制触发NetworkAvailabilityChanged事件 // Subscribe to the NetworkAvailabilityChanged event DeviceNetworkInformation.NetworkAvailabilityChanged

我一直在引用MSDN上的一个示例,该示例允许我确定网络更改和网络属性,例如网络名称、状态等。但是在网络更新发生之前,我如何获得相同的信息?例如,当我的应用程序加载时,未检测到网络更改,因此信息当前为空。我是否可以在导航页面时强制触发NetworkAvailabilityChanged事件

// Subscribe to the NetworkAvailabilityChanged event
DeviceNetworkInformation.NetworkAvailabilityChanged += new EventHandler<NetworkNotificationEventArgs>(ChangeDetected);

...


// In this callback, we examine the change that was detected. In this example, we are 
// creating a simple information string and adding that to the event list on the UI. 
// In a real application, this is where you might adjust your communication connection 
// in order to take advantage of a network availability change. 
 void ChangeDetected(object sender, NetworkNotificationEventArgs e)
{
string change = string.Empty;
switch (e.NotificationType)
{
    case NetworkNotificationType.InterfaceConnected:
        change = "Connected to ";
        break;
    case NetworkNotificationType.InterfaceDisconnected:
        change = "Disconnected from ";
        break;
    case NetworkNotificationType.CharacteristicUpdate:
        change = "Characteristics changed for ";
        break;
    default:
        change = "Unknown change with ";
        break;
}

string changeInformation = String.Format(" {0} {1} {2} ({3})",
            DateTime.Now.ToString(), change, e.NetworkInterface.InterfaceName,
            e.NetworkInterface.InterfaceType.ToString());

// We are making UI updates, so make sure these happen on the UI thread.
Dispatcher.BeginInvoke(() =>
{
    Changes.Add(changeInformation);
    UpdateNetworkStatus();
    UpdateNetworkInterfaces();

});

}
//订阅NetworkAvailabilityChanged事件
DeviceNetworkInformation.NetworkAvailabilityChanged+=新事件处理程序(检测到变更);
...
//在这个回调中,我们检查检测到的更改。在这个例子中,我们是
//创建一个简单的信息字符串并将其添加到UI上的事件列表中。
//在实际应用程序中,这是您可以调整通信连接的地方
//以利用网络可用性的变化。
检测到无效更改(对象发送方、NetworkNotificationEventArgs e)
{
字符串更改=string.Empty;
开关(如NotificationType)
{
案例网络通知类型.InterfaceConnect:
change=“连接到”;
打破
案例网络NotificationType.InterfaceDisconnected:
change=“断开连接”;
打破
案例网络通知类型.特征更新:
change=“更改为的特性”;
打破
违约:
change=“未知更改与”;
打破
}
string changeInformation=string.Format(“{0}{1}{2}({3})”,
DateTime.Now.ToString(),更改,e.NetworkInterface.InterfaceName,
e、 NetworkInterface.InterfaceType.ToString());
//我们正在进行UI更新,因此请确保这些更新发生在UI线程上。
Dispatcher.BeginInvoke(()=>
{
变更。添加(变更信息);
UpdateNet工作状态();
UpdateNetworkInterfaces();
});
}

您可以通过DeviceNetworkInformation类获取网络信息

您可以通过添加以下内容来获取此DeviceNetworkInformation

“使用Microsoft.Phone.Net.NetworkInformation;”

这里是从Microsoft获取设备网络信息的示例

希望这有帮助。(如果我错了,或者它不起作用,请纠正我)


谢谢。

DeviceNetworkInformation类不会返回当前网络名称或是否存在活动网络连接。我可以使用它来获取蜂窝网络以及它是否已连接,但我需要收集有关正在使用的活动网络连接的信息,无论是WiFi、以太网、蜂窝等。我已经实现了,但我只能在网络发生变化时返回数据。我的问题是,在应用程序加载并导航到页面时,我也需要这些信息。在该链接中,我基本上有相同的设置,只是我返回了有关网络接口的特定数据,如子类型,而我无法直接使用DeviceNetworkInformation获取这些数据。如果我错了,请纠正我的错误,但即使在链接示例中调用
updatenWorkInterfaces()
时,我也不会返回子类型数据,直到发生网络更改并触发事件。我尝试在页面加载时手动启动事件处理程序,但这也不可能。有什么想法吗?嗨,马修,你的意思是,如果那是一个蜂窝网络,你需要知道服务提供商的名字,如果是wifi,你需要知道ip和所有,对吗?是的,没错。问题是,我相信只要启动
DeviceNetworkInformation.NetworkAvailabilityChanged
,就可以检索到我需要的大部分数据,但不能在启动之前。我可以使用DeviceNetworkInformation获取基本数据,如运营商和蜂窝数据连接是否打开,但我需要在网络发生变化时在
NetworkNotificationEventArgs e
中返回的详细信息。