推荐的方法是定期ping资源,但我对此建议并不满意。我宁愿检测网络变化,然后再ping我的服务来检查它是否在线。
.NET为此提供了两个事件: NetworkChange.NetworkAvailabilityChanged NetworkChange.NetworkAddressChanged
第一个事件听起来不错,但仅在最后一个联网的网络卡脱机时触发。我有几个由VMWare安装的虚拟网络卡(始终在线),因此该事件无法满足我的需求。 第二个事件可以工作,但在插上网络电缆和触发事件之间通常需要等待5秒钟。 当我拔掉电缆时,Windows托盘图标的反应几乎是立即的。 有没有更快的方法?
我的解决方法是每500毫秒轮询一次 NetworkInterface.GetAllNetworkInterfaces(),并在网络适配器状态改变时抛出自己的事件。
一定有更好的解决方案 :)