C++ INetworkConnectionEvents支持什么?

C++ INetworkConnectionEvents支持什么?,c++,networking,event-handling,C++,Networking,Event Handling,我正在尝试使用这个API;然而,我无法让事件发生。 这是使用网络列表1.0类型库com 这是我的密码: public class AvailibleWLan : INetworkListManagerEvents, INetworkEvents, INetworkConnectionEvents { public NETWORKLIST.INetworkListManager NewWorkList {get;set;} public List<W

我正在尝试使用这个API;然而,我无法让事件发生。 这是使用网络列表1.0类型库com

这是我的密码:

 public class AvailibleWLan : INetworkListManagerEvents, INetworkEvents, INetworkConnectionEvents
    {
        public NETWORKLIST.INetworkListManager NewWorkList {get;set;}
        public List<WirelessNetwork> Connections { get; set; }
        public AvailibleWLan()
        {
            Connections = new List<WirelessNetwork>();
            NewWorkList = new NETWORKLIST.NetworkListManager();
            foreach (NETWORKLIST.INetwork Network in NewWorkList.GetNetworks(NETWORKLIST.NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_ALL))
            {
                String Name = Network.GetName();
                var Connectivity = Network.GetConnectivity();
                var Description = Network.GetDescription();
            }

        }
        //public event NetworkPropertyChanged NetworkConnectivityChanged;
        public WirelessNetwork Network { get; set; }

        void INetworkListManagerEvents.ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
        {
            throw new NotImplementedException();
        }

        void INetworkConnectionEvents.NetworkConnectionConnectivityChanged(Guid connectionId, NLM_CONNECTIVITY newConnectivity)
        {
            throw new NotImplementedException();
        }

    void INetworkConnectionEvents.NetworkConnectionPropertyChanged(Guid connectionId, NLM_CONNECTION_PROPERTY_CHANGE Flags)
    {
        throw new NotImplementedException();
    }

    void INetworkEvents.NetworkAdded(Guid networkId)
    {
        throw new NotImplementedException();
    }

    void INetworkEvents.NetworkConnectivityChanged(Guid networkId, NLM_CONNECTIVITY newConnectivity)
    {
        throw new NotImplementedException();
    }

    void INetworkEvents.NetworkDeleted(Guid networkId)
    {
        throw new NotImplementedException();
    }

    void INetworkEvents.NetworkPropertyChanged(Guid networkId, NLM_NETWORK_PROPERTY_CHANGE Flags)
    {
        throw new NotImplementedException();
    }
}
public类可用性局域网:INetworkListManagerEvents、INetworkEvents、INetworkConnectionEvents
{
public NETWORKLIST.INetworkListManager新工作列表{get;set;}
公共列表连接{get;set;}
公共可用性局域网()
{
连接=新列表();
NewWorkList=新建NETWORKLIST.NetworkListManager();
foreach(NewWorkList.GetNetworks中的NETWORKLIST.INetwork网络(NETWORKLIST.NLM_ENUM_Network.NLM_ENUM_Network_ALL))
{
字符串名称=Network.GetName();
var Connectivity=Network.GetConnectivity();
var Description=Network.GetDescription();
}
}
//公共事件网络属性已更改网络连接已更改;
公共无线网络{get;set;}
void inetworklistmanagervents.ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
{
抛出新的NotImplementedException();
}
void INetworkConnectionEvents.NetworkConnectionConnectivityChanged(Guid connectionId,NLM_CONNECTIVITY newConnectivity)
{
抛出新的NotImplementedException();
}
void INetworkConnectionEvents.NetworkConnectionPropertyChanged(Guid connectionId、NLM\u连接\u属性\u更改标志)
{
抛出新的NotImplementedException();
}
void INetworkEvents.NetworkAdded(Guid networkId)
{
抛出新的NotImplementedException();
}
void INetworkEvents.NetworkConnectivityChanged(Guid networkId,NLM\u CONNECTIVITY newConnectivity)
{
抛出新的NotImplementedException();
}
void INetworkEvents.NetworkDeleted(Guid networkId)
{
抛出新的NotImplementedException();
}
void INetworkEvents.NetworkPropertyChanged(Guid networkId、NLM\u网络\u属性\u更改标志)
{
抛出新的NotImplementedException();
}
}

所以我暂停了所有的活动。而vs永远不会爆发

您定义了所有必要的回调函数,这很好。但是,您必须通过调用感兴趣的网络的网络接口方法“advice”来注册这些事件

下面是一个代码示例:

namespace NetworkListSample
{
    class TestNetworkEvents : INetworkListManagerEvents, INetworkConnectionEvents
    {
        private INetworkListManager m_nlm = new NetworkListManager();

        private static Guid s_INetworkListManagerEventsGuid = typeof(INetworkListManagerEvents).GUID;
        private static Guid s_INetworkConnectionEventsGuid = typeof(INetworkConnectionEvents).GUID;

        public void RegisterForEvents()
        {
            // Here it will only register for events of a network which is connected,
            // if you wish to register for events of disconnected networks
            // use a different NLM_ENUM_NETWORK enum value
            IEnumNetworks Networks = m_nlm.GetNetworks(NLM_ENUM_NETWORK.NLM_ENUM_NETWORK_CONNECTED);
            foreach (INetwork item in Networks)
            {
                IConnectionPoint cp = null;
                IConnectionPointContainer icpc = (IConnectionPointContainer)m_nlm;
                int cookie = -1;

                Guid tempGuid = s_INetworkListManagerEventsGuid;
                icpc.FindConnectionPoint(ref tempGuid, out cp);
                cp.Advise(this, out cookie);
            }
        }

        public void ConnectivityChanged(NLM_CONNECTIVITY newConnectivity)
        {
            throw new NotImplementedException();
        }

        public void NetworkConnectionConnectivityChanged(Guid connectionId, NLM_CONNECTIVITY newConnectivity)
        {
            throw new NotImplementedException();
        }

        public void NetworkConnectionPropertyChanged(Guid connectionId, NLM_CONNECTION_PROPERTY_CHANGE Flags)
        {
            throw new NotImplementedException();
        }
    }
}

请不要忘记“unadvise”,它将整数cookie作为参数。

如果我不unadvise会发生什么?