今天遇到一个问题,当网络连接有问题的时候设计软件向用户发送通知,查了资料发现了两个相关的事件分享一下。
一、System.Net.NetworkInformation命名空间下的NetworkChange类中定义的NetworkAddressChanged事件:
此事件的官方摘要是:在网络接口的 IP 地址更改时发生。
在网络发生变化是会触发,并且不知道为什么在断网或者连网时分别会触发两次,如果知道原因的大神请留言告知,实例代码:
NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(AddressChangedCallback);
private void AddressChangedCallback(object sender, EventArgs e)
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface n in adapters)//查看网络适配器的状态
{
MessageBox.Show(n.Name + " is " + n.OperationalStatus);
}
if (CheckNetworkStatus() == false)
{
MessageBox.Show("与服务器网络断开");
}
}
private bool CheckNetworkStatus()//检测网络是否断开
{
bool networkFlag = false;
try
{
Ping p = new Ping();
PingOptions pOption = new PingOptions();
pOption.DontFragment = true;
string data = "Test Data!";
byte[] buffer = Encoding.ASCII.GetBytes(data);
int timeout = 500; // Timeout
string ip = "www.baidu.com";
System.Net.NetworkInformation.PingReply reply = p.Send(ip, timeout, buffer, pOption);
if (reply.Status == System.Net.NetworkInformation.IPStatus.Success)
{
networkFlag = true;
}
}
catch (Exception ex)
{
//ex.Message=Ping 请求期间发生异常
networkFlag = false;
}
return networkFlag;
}
二、System.Net.NetworkInformation命名空间下的NetworkChange类中定义的NetworkAvailabilityChanged事件:
此事件的官方摘要是:在网络的可用性更改时发生。
在网络可用性发生变化是会触发,在我的客户端中使用了这个事件监听网络可用性的变化,实例代码:
NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(AvailabilityChangedCallback);
public delegate void MyMethodP(object obj);//定义一个委托用于线程间的消息传递
private void AvailabilityChangedCallback(object sender, EventArgs e)
{
MyMethodP mm = new MyMethodP(MessageBoxShow);
if (!System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())//检测当前网络是否可用
{//断网处理
this.Invoke(mm, "系统检测当前网络断开,请重新登录!");
Application.Exit();
}
else
{
this.Invoke(mm, "检测到您当前网络不稳定,连接已断开,请重新登录!");
Application.Exit();
}
}
private void MessageBoxShow(object obj)//消息传递方法
{
MessageBox.Show(this, obj.ToString());
}