2010-09-09 7 views
0

Я пишу библиотеку классов .Net, которая должна подключаться к определенной сети Wi-Fi, имя которой известно заранее, когда уровень сигнала выше определенного порога.Можно ли сбросить интервал обновления сильного сигнала в Windows?

Все работает красиво, ЗА ИСКЛЮЧЕНИЕМ, что формальность немного пятнистая. У меня есть поток опроса, который повторно вызывает WlanGetAvailableNetworks(). Этот цикл хорошо работает - WLanGetAvailableNetworks() обычно занимает всего 10-20 мс. ОДНАКО, атрибут силы сигнала в структуре WLAN_AVAILALBLE_NETWORK, кажется, занимает много времени для обновления. Я видел, что для перехода в область с известной силой сигнала требуется 100 секунд для регистрации обновленного значения.

Я нашел загадочные ссылки на интервал обновления, включая этот, от парня, который реализовал NETSH Spawner: http://www.codeproject.com/KB/gadgets/WifiScanner.aspx?msg=3031431

Но я не нашел никого, кто рассматривал этот конкретный вопрос: ли можно настроить интервал обновления для уровня сигнала и других параметров сети в Native Wifi API?

Или я пропустил еще одну полезную концепцию? (Я полный noob, относительно Wifi).

Возможно соответствующая экологическая информация: - .Net 3.5 - XP плюс KB исправление WlanApi - C#/VS 2008 (4.0 и VS2010 доступна)

thanks -- 
Carl 

ответ

2

К сожалению. Я пропустил это в документации WLANAPI: WlanScan()! Вызовите это до WlanGetAvailableNetworks(), чтобы гарантировать, что WlanGetAvailableNetworks() возвращает более или менее актуальную информацию. Согласно документу (http://msdn.microsoft.com/en-us/library/ms706783(VS.85).aspx), WlanScan() завершает работу немедленно и запускает асинхронное сканирование.

Эмпирически, похоже, что следующая WlanGetAvailableNetworks() кажется остановленной до тех пор, пока сканирование не завершится (3.085 секунды, +/- 0,031 секунды, в моем тестировании). Таким образом, как указывает документ, вы не хотите делать это нигде, что может привести к калеке. Кроме того, три секунды, вероятно, касаются наилучшего временного разрешения для проверки сигналов Wi-Fi, по крайней мере на XP (Vista и 7 версий WLANAPI поддерживают односетевое WlanScan(), которое может завершиться быстрее).

Проблема решена, более или менее.