如以上评论所述,需要使用网络名单管理人,详情如下:there 。
To do so first add a reference to it as shown in the the screenshot below.
Right click on your project in your Visual Studio solution. Select Add > Reference... Go to COM and find the "Network List Manager 1.0 Type Library" entry using the search box.
That will generate an Interop DLL to this COM interface in your binary output folder. That DLL is named Interop.NETWORKLIST.dll.
在你的解决方案探索者中,你可以正确点击“NETWORKLIST”的参考资料,你刚刚补充并选择了“在目标Browser”的“意见”,以检查你能够接触的界面。
从这里看,你可以执行下文所示的网络管理员班,以订阅连接变化活动。
using System;
using System.Runtime.InteropServices.ComTypes;
using System.Diagnostics;
using NETWORKLIST;
namespace SharpDisplayManager
{
public class NetworkManager: INetworkListManagerEvents, IDisposable
{
public delegate void OnConnectivityChangedDelegate(NetworkManager aNetworkManager, NLM_CONNECTIVITY aConnectivity);
public event OnConnectivityChangedDelegate OnConnectivityChanged;
private int iCookie = 0;
private IConnectionPoint iConnectionPoint;
private INetworkListManager iNetworkListManager;
public NetworkManager()
{
iNetworkListManager = new NetworkListManager();
ConnectToNetworkListManagerEvents();
}
public void Dispose()
{
//Not sure why this is not working form here
//Possibly because something is doing automatically before we get there
//DisconnectFromNetworkListManagerEvents();
}
public INetworkListManager NetworkListManager
{
get { return iNetworkListManager; }
}
public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
{
//Fire our event
OnConnectivityChanged(this, newConnectivity);
}
public void ConnectToNetworkListManagerEvents()
{
Debug.WriteLine("Subscribing to INetworkListManagerEvents");
IConnectionPointContainer icpc = (IConnectionPointContainer)iNetworkListManager;
//similar event subscription can be used for INetworkEvents and INetworkConnectionEvents
Guid tempGuid = typeof(INetworkListManagerEvents).GUID;
icpc.FindConnectionPoint(ref tempGuid, out iConnectionPoint);
iConnectionPoint.Advise(this, out iCookie);
}
public void DisconnectFromNetworkListManagerEvents()
{
Debug.WriteLine("Un-subscribing to INetworkListManagerEvents");
iConnectionPoint.Unadvise(iCookie);
}
}
}
You can instantiate your Network Manager like this:
iNetworkManager = new NetworkManager();
iNetworkManager.OnConnectivityChanged += OnConnectivityChanged;
在收到连接变化活动后,你可以测试IsConnected ToInternet和IsConnected属性如下:
public void OnConnectivityChanged(NetworkManager aNetwork, NLM_CONNECTIVITY newConnectivity)
{
//Update network status
UpdateNetworkStatus();
}
/// <summary>
/// Update our Network Status
/// </summary>
private void UpdateNetworkStatus()
{
//TODO: Test the following functions to get network and Internet status
//iNetworkManager.NetworkListManager.IsConnectedToInternet
//iNetworkManager.NetworkListManager.IsConnected
}
Here is a related question:
INetworkConnectionEvents Supports what?