当我的 Windows 系统获得 Internet 连接时,我希望立即在我的 .Net C# Windows MAUI 应用程序中收到通知。
NetworkChange.NetworkAddressChanged
事件。但如果我获得新的 IP 地址,它会通知我。
这可能是与我的路由器的连接,该路由器未连接到互联网。
但是当我的路由器连接到互联网时,Windows 托盘图标会向我显示。所以,我相信 Windows API 可以通知我。
NetworkListManager
和他的 INetworkConnectionEvents
界面,它应该通过 NetworkConnectionConnectivityChanged
方法通知我有关连接的更改,例如使用 NLM_CONNECTIVITY_IPV4_INTERNET
,如果已建立与互联网的连接。
我尝试用这个类来实现这个:
public class Receiver : INetworkConnectionEvents
{
public Receiver()
{
var networkListManager = (INetworkListManager)new NetworkListManager();
var guid = Guid.Parse("DCB00001-570F-4A9B-8D69-199FDBA5723B");
((IConnectionPointContainer)networkListManager).FindConnectionPoint(ref guid, out var connectionPoint);
connectionPoint.Advise(this, out var cookie); // After return cookie is "1"
}
public HRESULT NetworkConnectionConnectivityChanged(Guid connectionId, NLM_CONNECTIVITY newConnectivity)
{
throw new NotImplementedException();
}
public HRESULT NetworkConnectionPropertyChanged(Guid connectionId, NLM_CONNECTION_PROPERTY_CHANGE Flags)
{
throw new NotImplementedException();
}
}
不会发生错误,如果我用它构建一个对象,
cookie
将返回“1”。
但是如果我用这个连接到互联网,我将不会在
NetworkConnectionConnectivityChanged
方法中收到通知。
这是正确的通知方式吗?
如果是的话,我的错在哪里?
您将错误的指南传递给
FindConnectionPoint()
。
您使用的 guid
DCB00001-570F-4A9B-8D69-199FDBA5723B
是 INetworkListManagerEvents
的 IID,而不是您已实现的 INetworkConnectionEvents
。
INetworkConnectionEvents
的正确IID是DCB00007-570F-4A9B-8D69-199FDBA5723B
。
INetworkListManagerEvents
,其中有一个 ConnectivityChanged
事件。