C#与网络相关的两个监听的事件
今天遇到一个问题,当网络连接有问题的时候设计软件向用户发送通知,查了资料发现了两个相关的事件分享一下。
一、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());
}
C#与网络相关的两个监听的事件的更多相关文章
- 两种js监听滚轮事件的方式
前段时间在写前端的时候,需要监听浏览器的滚轮事件 网上查了一下,找到两种监听滚轮事件的方法: 一.原生js通过window.onscroll监听 //window.onscroll = functio ...
- Oracle启动两个监听
接上篇:Oracle服务器修改IP后 Oracle服务器更换IP后,办公网络里面可以正常访问了,外地的同事,连了vpn 也可以访问,以为可以收工回家,突然又有同事过来说,机房的服务器ping不通新的i ...
- 【ERROR】Oracle11g两个监听同名进程的故障
问题: 一个实例启动了另个两个监听. 解决方法: #ps -ef | grep tnslsnr #oracle 925826 1 0 Apr 06 - 234:50 /u01/app/oracle/p ...
- JS 中的事件绑定、事件监听、事件委托
事件绑定 要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有 ...
- javascript事件监听与事件委托
事件监听与事件委托 在js中,常用到element.addEventListener()来进行事件的监听.但是当页面中存在大量需要绑定事件的元素时,这种方式可能会带来性能影响.此时,我们可以用事件 ...
- 在Javascript中监听flash事件(转)
在Javascript中监听flash事件,其实有两种做法: 1.在特定的环境下(例如专门制作的flash),大家约定一个全局函数,然后在flash的事件中用ExternalInterface.cal ...
- Vue 爬坑之路(七)—— 监听滚动事件 实现动态锚点
前几天做项目的时候,需要实现一个动态锚点的效果 如果是传统项目,这个效果就非常简单.但是放到 Vue 中,就有两大难题: 1. 在没有 jQuery 的 animate() 方法的情况下,如何实现平滑 ...
- H5_0003:JS禁用调试,禁用右键,监听F12事件的方法
1,禁用调试 // 这个方法是防止恶意调试的 (function () { console["log"]("=============================== ...
- JS 事件绑定、事件监听、事件委托详细介绍
原:http://www.jb51.net/article/93752.htm 在JavaScript的学习中,我们经常会遇到JavaScript的事件机制,例如,事件绑定.事件监听.事件委托(事件代 ...
随机推荐
- drf路由与认证
目录 一.路由 1 没有继承视图集的视图类 2 继承了视图集的视图类 3 继承自ModelViewSet的路由写法(自动生成) 二.认证 1 drf认证的源码分析 2 自定义认证类的使用 一.路由 三 ...
- Linux超强截图工具flameshot
Pop!_OS自带的截屏快捷键如下 但讲道理这个是真的不好用 所以我们借助第三方的截图工具,这里推荐flameshot(火焰截图) 在终端键入以下命令即可安装 sudo apt update sudo ...
- JavaScript的参数是按照什么方式传递的?
1.基本类型传递方式 <script> var a = 1; function test(x) { x = 10; console.log(x); } test(a); // consol ...
- [系列] Go - json.Unmarshal 遇到的小坑
1.问题现象描述 使用 json.Unmarshal(),反序列化时,出现了科学计数法,参考代码如下: jsonStr := `{"number":1234567}` result ...
- 使用命名管道承载gRPC
最近GRPC很火,感觉整RPC不用GRPC都快跟不上时髦了. gRPC设计 刚好需要使用一个的RPC应用系统,自然而然就盯上了它,但是它真能够解决所有问题吗?不见得,先看看他的优点: gRPC是一种与 ...
- java 面向对象(九):类的结构:构造器(一)简介;属性赋值顺序;JavaBean的概念
1.构造器(或构造方法):Constructor构造器的作用: * 1.创建对象 * 2.初始化对象的信息2.使用说明: * 1.如果没显式的定义类的构造器的话,则系统默认提供一个空参的构造器 * 2 ...
- vue 修改浏览器标题
主要思路: 1.可以从路由获取当前页面的标题,再通过document.title设值,或者在最外层的index.html页面添加<title>标签 import router from ' ...
- 史上最全的 jmeter 获取 jdbc 数据使用的四种方法
jmeter使用jdbc协议获取数据库中数据,很多人都会用,因为大家在做测试的时候,有时候需要大量的用户进行登录,获取需要数据库中真实的数据用于测试,所以常常会用jdbc来获取数据库数据. 那从数据库 ...
- Windows 磁盘分区后如何再合并&如何用Windows自带工具扩大某个分区
Windows 磁盘分区后如何再合并&用Windows自带工具扩大某个分区 注:此方法有一定的成功率,更加完善可行的方法请看http://www.diskgenius.cn/help/part ...
- Python Ethical Hacking - Bypass HTTPS(2)
Injecting Code in HTTPS Pages: #!/usr/bin/env python import re from netfilterqueue import NetfilterQ ...