- [C#] Cách Sử Dụng DeviceId trong C# Để Tạo Khóa Cho Ứng Dụng
- [SQLSERVER] Loại bỏ Restricted User trên database MSSQL
- [C#] Hướng dẫn tạo mã QRcode Style trên winform
- [C#] Hướng dẫn sử dụng temp mail service api trên winform
- [C#] Hướng dẫn tạo mã thanh toán VietQR Pay không sử dụng API trên winform
- [C#] Hướng Dẫn Tạo Windows Service Đơn Giản Bằng Topshelf
- [C#] Chia sẻ source code đọc dữ liệu từ Google Sheet trên winform
- [C#] Chia sẻ source code tạo mã QR MOMO đa năng Winform
- [C#] Chia sẻ source code phần mềm lên lịch tự động chạy ứng dụng Scheduler Task Winform
- [Phần mềm] Tải và cài đặt phần mềm Sublime Text 4180 full version
- [C#] Hướng dẫn download file từ Minio Server Winform
- [C#] Hướng dẫn đăng nhập zalo login sử dụng API v4 trên winform
- [SOFTWARE] Phần mềm gởi tin nhắn Zalo Marketing Pro giá rẻ mềm nhất thị trường
- [C#] Việt hóa Text Button trên MessageBox Dialog Winform
- [DEVEXPRESS] Chia sẻ code các tạo report in nhiều hóa đơn trên XtraReport C#
- [POWER AUTOMATE] Hướng dẫn gởi tin nhắn zalo từ file Excel - No code
- [C#] Chia sẻ code lock và unlock user trong domain Window
- [DEVEXPRESS] Vẽ Biểu Đồ Stock Chứng Khoán - Công Cụ Thiết Yếu Cho Nhà Đầu Tư trên Winform
- [C#] Hướng dẫn bảo mật ứng dụng 2FA (Multi-factor Authentication) trên Winform
- [C#] Hướng dẫn convert HTML code sang PDF File trên NetCore 7 Winform
[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!