我写了这段代码,它可以完美地工作,但我担心每2秒钟ping一次会消耗太多的资源或者可能会对互联网连接造成一些问题。
new Thread(() =>
{
if (CheckInternetConnection() == false)
{
Dispatcher.Invoke(new Action(delegate
{
//internet access lost
}));
}
else
{
Dispatcher.Invoke(new Action(delegate
{
//internet access
}));
}
Thread.Sleep(2000);
}).Start();
[DllImport("wininet.dll")]
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);
public static bool CheckInternetConnection()
{
int output = 0;
return InternetGetConnectedState(out output, 0);
}
这是两个事件,并非所有情况下都有效(仅在IP或网络卡更改时才有效)
NetworkChange.NetworkAvailabilityChanged += NetworkChange_NetworkAvailabilityChanged
NetworkChange.NetworkAddressChanged += NetworkChange_NetworkAddressChanged;
有人能帮我吗?
NetworkChange.NetworkAvailabilityChanged
可以正常工作,但是有几个注意事项:1) 它不会告诉你是否有互联网访问权限,它只会告诉你是否至少有一个非环回网络适配器在工作;2) 通常会因为各种原因安装额外的网络适配器,即使你的主要互联网连接适配器被禁用或不可用,系统仍处于“网络可用”状态。 - Peter Duniho