今天遇到一個問題,當網絡鏈接有問題的時候設計軟件向用戶發送通知,查了資料發現了兩個相關的事件分享一下。服務器
1、System.Net.NetworkInformation命名空間下的NetworkChange類中定義的NetworkAddressChanged事件:網絡
此事件的官方摘要是:在網絡接口的 IP 地址更改時發生。this
在網絡發生變化是會觸發,而且不知道爲何在斷網或者連網時分別會觸發兩次,若是知道緣由的大神請留言告知,實例代碼:spa
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事件:orm
此事件的官方摘要是:在網絡的可用性更改時發生。接口
在網絡可用性發生變化是會觸發,在個人客戶端中使用了這個事件監聽網絡可用性的變化,實例代碼:事件
NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(AvailabilityChangedCallback);ip
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()); }