C#與網絡相關的兩個監聽的事件

  今天遇到一個問題,當網絡鏈接有問題的時候設計軟件向用戶發送通知,查了資料發現了兩個相關的事件分享一下。服務器

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());        }

相關文章
相關標籤/搜索