- [C#] Hướng dẫn fix lỗi Visual Studio 2022 not Support Target Net Framework 4.5.2
- [C#] Giới thiệu thư viện Sunny UI thiết kế giao diện trên Winform
- [DATABASE] Hướng dẫn thêm và cập nhật Extended Property Column trong Table Sqlserver
- [DEVEXPRESS] Hướng dẫn sử dụng Vertical Gridview để hiển thị thông tin sản phẩm
- [C#] Hướng dẫn sử dụng Json Schema để Validate chuỗi string có phải json
- [C#] Hướng dẫn sử dụng công cụ Clean Code trên Visual Studio
- [C#] Hướng dẫn Drag and Drop File vào RichTextBox
- [C#] Hướng dẫn tạo hiệu ứng Karaoke Text Effect Winform
- [C#] Sử dụng thư viện ZedGraph vẽ biểu đồ Line, Bar, Pie trên Winform
- [DATABASE] Hướng dẫn sort sắp xếp địa chỉ IP trên sqlserver sử dụng hàm PARSENAME
- [C#] Theo dõi sử kiện process Start hay Stop trên Winform
- [ASP.NET] Chia sẻ source code chụp hình sử dụng camera trên website
- [C#] Chạy ứng dụng trên Virtual Desktop (màn hình ảo) Winform
- [C#] Mã hóa và giải mã Data Protection API trên winform
- [C#] Hướng dẫn tạo Gradient Background trên Winform
- [DATABASE] Hướng dẫn convert Epoch to DateTime trong sqlserver
- [DATABASE] Hướng dẫn sử dụng STRING_AGG và CONCAT_WS trong sqlserver 2017
- [C#] Hướng dẫn Copy With All Property in Class Object
- [DEVEXPRESS] Hướng dẫn load Json DataSource vào GridView
- [C#] Hướng dẫn tạo chữ ký trên winform Signature Pad
[C#] Kiểm tra kết nối internet Realtime sử dụng Network List Manager của Windows
Xin chào các bạn, bài viết hôm nay mình sẽ hướng dẫn các bạn cách kiểm tra kết nối mạng internet realtime trong lập trình C# sử dụng thư viện Network List Manager (NLM) trong Windows.
[C#] How do I check if I have an Internet connection Realtime
Nếu bạn nào đang lập trình ứng dụng có kết nối internet để làm việc, như những ứng dụng gởi email marketing hàng loạt, curl website hay gởi tin nhắn qua mạng.
Thì chúng ta thường muốn kiểm tra xem kết nối mạng internet có bị sự cố gì hay không.
Nếu có sự cố mất kết nối mạng hoặc có kết nối mạng lại, thì sẽ hiển thị thông báo cho người dùng đang sử dụng phần mềm biết.
Hoặc mình có thể bắt sự kiện mất kết nối đó để xử lý một số yêu cầu theo mục đích của mình.
Thường các bạn muốn kiểm tra kết nối mạng Internet có bị sự cố hay không? các bạn sẽ nghĩ đến ngay là mình sẽ sử dụng một HttpRequest
để ping đến một địa chỉ nào đó.
Giao diện demo ứng dụng kiểm tra kết nối internet Realtime C#:

VD: như 8.8.8.8 Dns của google, nếu trả về Timeout thì chúng ta xuất thông báo.
Nhưng trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng thư viện Network List Manager (NLM), thư viện này đi kèm trong bộ Visual Studio của Microsoft, giúp ta có thể lấy tình trạng kết nối internet realtime của windows.
Vậy sử dụng thư viện này mình sẽ bắt được sự kiện kiểm tra kết nối internet của Windows như hình bên dưới, nó kết nối internet qua hai địa chỉ ip: IP v4 và IP v6.
Bây giờ mình sẽ bắt đầu thực hiện:
Đầu tiên các bạn tạo cho mình mới với tên NLM_Demo
.
Sau đó, chúng ta sẽ tiến hành import thư viện NetWork List Manager vào project như hình bên dưới.
Khi hộp thoại xuất hiện các bạn chọn Network List Manager 1.0 Type Library
như hình bên dưới:
Tiếp theo, các bạn tạo cho mình một class với tên CheckerInternetHelper.cs
.
Và class này chúng ta sẽ implement interface INetworkListManagerEvents
.
Source code file CheckerInternetHelper.cs C#:
using NETWORKLIST;
using System;
using System.Drawing;
using System.Runtime.InteropServices.ComTypes;
namespace NLM_Demo
{
class CheckerInternetHelper: INetworkListManagerEvents
{
private int m_cookie = 0;
private IConnectionPoint m_icp;
private INetworkListManager m_nlm;
private Form1 frm;
public CheckerInternetHelper(Form1 frm)
{
m_nlm = new NetworkListManager();
this.frm = frm;
}
public void SetText(string message, Color color, Color color2)
{
frm.label1.BeginInvoke(new Action(() => {
frm.label1.Text = message;
frm.label1.ForeColor = color;
frm.label1.BackColor = color2;
frm.flyoutPanel1.ShowPopup();
frm.CountDownloadHidePopup();
}));
}
public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
{
if (newConnectivity == NLM_CONNECTIVITY.NLM_CONNECTIVITY_DISCONNECTED)
{
SetText("Đã ngắt kết nối internet!", Color.White, Color.Red);
}
if (((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) != 0)
{
SetText("Đang kết nối thành công Internet với IPv4!", Color.White, Color.Green);
}
if (((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_INTERNET) != 0)
{
SetText("Đang kết nối thành công Internet với IPv6!", Color.White, Color.Green);
}
if ((((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV4_INTERNET) == 0)
&& (((int)newConnectivity & (int)NLM_CONNECTIVITY.NLM_CONNECTIVITY_IPV6_INTERNET) == 0))
{
SetText("Mất kết nối Internet!", Color.White, Color.Red);
}
}
public INetworkListManager NLM
{
get
{
return m_nlm;
}
}
public void AdviseforNetworklistManager()
{
IConnectionPointContainer icpc = (IConnectionPointContainer)m_nlm;
Guid tempGuid = typeof(INetworkListManagerEvents).GUID;
icpc.FindConnectionPoint(ref tempGuid, out m_icp);
m_icp.Advise(this, out m_cookie);
}
public void UnAdviseforNetworklistManager()
{
m_icp.Unadvise(m_cookie);
}
}
}
+ Trong bài viết demo này, mình có sử dụng Flyout Panel của Devexpress để hiện thị thông báo.
Và mình có sử dụng một Timer
để set cho popup này tự động đóng đi sau khoảng thời gian chúng ta quy định.
Tiếp theo là source code của Form1.cs C#
using DevExpress.XtraEditors;
using NETWORKLIST;
using System;
using System.Windows.Forms;
namespace NLM_Demo
{
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
CheckerInternetHelper helper;
public Form1()
{
InitializeComponent();
helper = new CheckerInternetHelper(this);
}
private void Form1_Load(object sender, EventArgs e)
{
label2.Text = "Mất kết nối mạng Internet!";
IEnumNetworks Networks = helper.NLM.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED);
foreach (INetwork item in Networks)
{
label2.Text = "Đang kết nối mạng:" + item.GetName();
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
helper.UnAdviseforNetworklistManager();
}
public void CountDownloadHidePopup()
{
timer1.Enabled = true;
}
int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{
i++;
if (i == 10)
{
flyoutPanel1.HidePopup();
i = 0;
timer1.Enabled = false;
}
}
private void btn_dangky_Click(object sender, EventArgs e)
{
helper.AdviseforNetworklistManager();
XtraMessageBox.Show("Đã đăng ký kiểm tra kết nối mạng thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void btn_huydangky_Click(object sender, EventArgs e)
{
helper.UnAdviseforNetworklistManager();
XtraMessageBox.Show("Đã hủy đăng ký kiểm tra kết nối mạng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
Hy vọng bài viết sẽ giúp ích được cho các bạn.
Video demo ứng dụng Detect Internet Realtime C#:
Thanks for watching!