C#实现网络监控
利用C#代码实现网络监控,如果出现断网,进行后续处理(如,重启,设置重连,用户提示等)
注意:最开始看的文章也不知道在哪里了,标注转载需要转载原文链接,此处就标记了原著
实现方法:
using Microsoft.VisualBasic.Devices;
using System;
using System.Threading;
namespace Helper
{
class Method
{
//网络状态标志位
public string netWorkStatus = "0";
//刷新线程
public Thread thrRefresher;
/// <summary>
/// 用于控制线程的暂停和继续
/// </summary>
public AutoResetEvent areRefresher = new AutoResetEvent(false);
public Method()
{
netWorkStatus = GetNetworkStatus();
var msg = netWorkStatus == "1" ? "网络已连接" : "网络已断开";
thrRefresher = new Thread(new ThreadStart(KeepOnRefresh));
}
private void KeepOnRefresh()
{
try
{
while (true)
{
var result = GetNetworkStatus();
if (!string.Equals(result, netWorkStatus))
{
string resultStr = result == "1" ? "网络已连接" : "网络已断开";
Console.WriteLine(DateTime.Now.ToString() + ":" + resultStr);
//获取最新标志位
netWorkStatus = result;
}
//执行一次后暂停一个信息获取周期的时间
for (int i = 0; i < 10; i++)
{
Thread.Sleep(200);
}
//string x = null;
//x.Equals("`");
}
}
catch (Exception ex)
{
Console.WriteLine(DateTime.Now.ToString() + ":网络检测程序终止,请重启!");
areRefresher.WaitOne();
thrRefresher.Abort();
}
}
public string GetNetworkStatus()
{
Network nw = new Network();
//获取网络状态
if (nw.IsAvailable)
return "1";
else
return "0";
}
}
}
这里使用控制台应用程序,测试一下连接状态:
using System;
using System.Runtime.InteropServices;
namespace Helper
{
/// <summary>
/// 监控网络状态改变并且记录日志
/// </summary>
class Program
{
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", EntryPoint = "FindWindowEx")] //找子窗体
private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
[DllImport("User32.dll", EntryPoint = "SendMessage")] //用于发送信息给窗体
private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
[DllImport("User32.dll", EntryPoint = "ShowWindow")] //
private static extern bool ShowWindow(IntPtr hWnd, int type);
static void Main(string[] args)
{
Method method = new Method();
var msg = method.netWorkStatus == "1" ? "网络已连接" : "网络已断开";
Console.WriteLine("网络连接监控--------------------->");
Console.WriteLine("初始网络状态:" + msg);
method.thrRefresher.Start();
method.areRefresher.Set();
Console.Title = "网络监控";
IntPtr ParenthWnd = new IntPtr(0);
IntPtr et = new IntPtr(0);
ParenthWnd = FindWindow(null, "网络监控");
ShowWindow(ParenthWnd, 1);//隐藏本dos窗体, 0: 后台执行;1:正常启动;2:最小化到任务栏;3:最大化
Console.ReadLine();
}
}
}