Мониторинг радиосоединения WLAN в Windows Mobile 6/C#

В настоящее время я разрабатываю приложение, предназначенное для HP IPAQ 210. Часть этого приложения требует, чтобы радиомодуль WLAN был включен/включен для подключения к предварительно настроенной точке доступа. В настоящее время я использую IPAQ SDK (через P/Invoke), чтобы включить радио WLAN, но у меня возникают проблемы с надежным определением того, когда радио установило соединение с предпочтительной точкой доступа. В настоящее время я отслеживаю свойство Microsoft.WindowsMobile.Status.SystemState.WiFiStateConnected, но предпочел бы подписаться на событие, чтобы получать уведомления об установлении соединения.

Я немного покопался в библиотеке OpenNETCF, и кажется, что в версии 2.3 есть многообещающие вещи, но пока мы застряли на версии 2.2.

Есть ли надежный способ определить статус соединения?


person bjanaszek    schedule 11.02.2009    source источник


Ответы (3)


Это уродливо, и это не событие, но если ничего не помогает, вы можете попробовать проверить состояние оборудования Wi-Fi, прочитав его раздел реестра:

int key = (int)Registry.GetValue("HKEY_LOCAL_MACHINE\\System\\State\\Hardware", "WiFi", -1);
person Sam    schedule 19.02.2009
comment
Просто добавим к этому: значение будет содержать следующие свойства с битовой маской: 2 - WiFiStatePowerOn 8 - WiFiStateConnecting 16 - WiFiStateConnected Обратите внимание, что они стандартны для WM5, но недокументированы для WM6 (но, похоже, они работают). Кроме того, оболочки SystemState в .NET кажутся ненадежными. - person bjanaszek; 20.02.2009
comment
Ага. И 4 Сети доступны. 1 Кажется, что все время установлено, может быть, это означает доступное оборудование Wi-Fi? - person Sam; 20.02.2009

Итак, на случай, если кто-то еще столкнется с этим, я нашел метод ключа реестра, описанный выше, в основном надежным, но мне нужен был более надежный метод. Я перешел к использованию библиотеки OpenNETCF 2.2 NetworkInformation для мониторинга свойства CurrentIPAddress интерфейса WirelessZeroConfigInterface. Я все еще использую IPAQUtils для управления мощностью радиомодуля WLAN (я обнаружил, что радиоуправление OpenNETCF 2.2 отсутствует, и устройство будет иметь только одну запись в сети Wi-Fi), но вот как я отслеживаю IP-адрес интерфейса :

NetworkInterface[] netIntfs = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in netIntfs)
{
    if (ni is WirelessZeroConfigNetworkInterface)
    {
       wzcni = (WirelessZeroConfigNetworkInterface)ni;
    }
}

while (wzcni.CurrentIpAddress.ToString() == "0.0.0.0" && tryCount < 10)
{
    wzcni.Refresh();
    System.Threading.Thread.Sleep(3000);
    tryCount++;
}
person bjanaszek    schedule 08.05.2009

person    schedule
comment
Кажется, это не имеет отношения к вопросу. - person Mike Two; 11.10.2012