我的团队正在开发一个团队项目应用程序。目前,我们需要一个事件处理程序来检查连接状态(如果它是打开/关闭的)。
我对System.Net.NetworkInformation
命名空间寄予厚望,但不幸的是,wp8不支持最重要的事情。
有人可以帮我一点吗?
编辑1#
看来,我没有很好地指出我的问题。 我正在使用Mvvm light expresion,它不支持该命名空间,或者至少我无法添加它。
我是使用VS和c#atm的新手,mayby我做错了,但只是当我试图将引用添加到我的项目时它没有列出。
答案 0 :(得分:29)
我没有在WP8上尝试过System.Net.NetworkInformation命名空间。但新的WP8 Windows.Networking.Connectivity Windows Phone Runtime命名空间工作得很好。
使用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上启动时,我只看到以下MessageBox:
一旦我关闭了我的WiFI路由器并且手机上的WiFi连接丢失,我看到以下MessageBox:
答案 1 :(得分:18)
试试这个:
bool isNetwork=NetworkInterface.GetIsNetworkAvailable();
if(!isNetwork)
{
//proceed with your code
}
答案 2 :(得分: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);
}