2013-11-12 3 views
2

Я использую этот простой способ для обнаружения сети подключения/отключения события:NetworkChange.NetworkAddressChanged событие перестает работать

NetworkChange.NetworkAddressChanged += new NetworkAddressChangedEventHandler(NetworkChange_NetworkAddressChanged); 
NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged); 

... 

static void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e) 
{ 
    RaiseNewtorkChange(); 
} 

static void NetworkChange_NetworkAddressChanged(object sender, EventArgs e) 
{ 
    RaiseNewtorkChange(); 
} 

static void RaiseNewtorkChange() 
{ 
    ... 
} 

Проблема заключается в том, что иногда NetworkAddressChanged событие просто перестает работать, после того, как он был уволен несколько раз. У кого-нибудь есть идея, почему это может произойти?

В качестве альтернативы, существует ли другой способ обработки сетевых подключений/отключений, используя C# или C/C++. Может быть, есть такая функциональность в Windows API или WMI? Мне нужно уведомление о подключении/отключении сети LAN/WiFi без опроса.

+0

FWIW, наиболее вероятная причина, по которой вы видите его «просто перестать работать», заключается в том, что исключение выбрасывается где-то в обработчике 'RaiseNetworkChange()' и любом последующем коде. Зачем? Прочтите это: https://connect.microsoft.com/VisualStudio/feedback/details/589409/notification-of-static-networkchange-networkaddresschanged-event-is-delayed-or-never-received – Redgum

ответ

1

Мне кажется, что вам нужно использовать Native Wifi API.

Посмотрите на функцию WlanRegisterNotification, в частности, это уведомление:

WLAN_NOTIFICATION_SOURCE_ACM:
Регистры для уведомлений, генерируемых модулем автоматической конфигурации.
Windows XP с пакетом обновления 3 (SP3) и API беспроводной локальной сети для Windows XP с пакетом обновления 2 (SP2): доступны только wlan_notification_acm_connection_complete и . Уведомления wlan_notification_acm_disconnected доступны.

Предупреждение: В прошлом я использовал собственный API Wifi, но я никогда не использовал эту особенность.

+0

Спасибо, это может помочь для WiFi , но я ищу универсальное решение для всех типов сетей, включая LAN. –

Смежные вопросы