Iot Core падает Wi-Fi при попытке получить сигнальные полосы / силы, после некоторого успеха

Я сталкиваюсь со странной проблемой. Я хочу периодически получать полосы сигнала Wi-Fi и обновлять небольшой дисплей. Я попытался запустить его в коде и с помощью API. Оба будут работать некоторое время, но через некоторое время, может быть, через 30 минут приложение Iot по умолчанию не отображает информацию о сети. Если я зайду в настройки и нажму "Сеть и Wi-Fi", устройство будет зависать, и его необходимо будет перезагрузить.

Я подумал, что, возможно, я сканировал слишком быстро, поэтому я изменил таймер на каждую минуту, но проблема все еще осталась. Это может быть проблемой с моим подходом, может быть, есть более чистый способ получить эту информацию о сигнале без сканирования? Я использую Windows Iot Core v.10.0.16299.309 на Raspberry Pi3. Это мой код

Вызывается из Run

ThreadPoolTimer UpdateWifiSignalTimer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
        {
            WifiSignal();
        }, TimeSpan.FromMinutes(1));

Попытка 1

if (WiFiAdapter != null)
        {
            networkAddapterId = WiFiAdapter.NetworkAdapter.NetworkAdapterId.ToString();
            await WiFiAdapter.ScanAsync();

            if (WiFiAdapter.NetworkAdapter.GetConnectedProfileAsync() != null)
            {
                var connectedProfile = await WiFiAdapter.NetworkAdapter.GetConnectedProfileAsync();
                if (connectedProfile != null && !connectedProfile.ProfileName.Equals(savedProfileName))
                {
                    savedProfileName = connectedProfile.ProfileName;
                    wifiProfile.Add( new WifiProfile { MacAddress = networkAddapterId, Ssid = savedProfileName }) ;
                }
            }

            var wifiPoint = new List<WiFiSignal>();
            WiFiNetworkReport report = WiFiAdapter.NetworkReport;

            foreach (var availableNetwork in report.AvailableNetworks)
            {
                WiFiSignal wifiSignal = new WiFiSignal()
                {
                    MacAddress = availableNetwork.Bssid,
                    Ssid = availableNetwork.Ssid,
                    SignalBars = availableNetwork.SignalBars,
                    ChannelCenterFrequencyInKilohertz = availableNetwork.ChannelCenterFrequencyInKilohertz,
                    NetworkKind = availableNetwork.NetworkKind.ToString(),
                    PhysicalKind = availableNetwork.PhyKind.ToString(),
                    Encryption = availableNetwork.SecuritySettings.NetworkEncryptionType.ToString()
                };

                wifiPoint.Add(wifiSignal);
            }

            int bars = 0;
            foreach (var localNetworks in wifiPoint)
            {
                if (localNetworks.Ssid == savedProfileName)
                {
                    bars = localNetworks.SignalBars;
                    display.ClearDisplayBuf();
                }
            }

Попытка 2

using (HttpClient client = new HttpClient())
        {
            if (interfaceGUID == null)
            {
                using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, string.Format("http://{0}:8080/api/wifi/interfaces", DeviceName)))
                {

                    request.Headers.Authorization = CreateBasicCredentials("Administrator", PASSWORD);
                    using (HttpResponseMessage response = await client.SendAsync(request))
                    {
                        var data = await response.Content.ReadAsStringAsync();
                        var interfaces = JsonConvert.DeserializeObject<AvailableInterfaces>(data);
                        var ourInterface = interfaces.Interfaces.First();
                        interfaceGUID = ourInterface.GUID.Replace('{', ' ').Replace('}', ' ').Trim();
                    }
                }
            }

            using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, string.Format("http://{0}:8080/api/wifi/networks?interface={1}", DeviceName, interfaceGUID)))
            {
                request.Headers.Authorization = CreateBasicCredentials("Administrator", PASSWORD);
                using (HttpResponseMessage response = await client.SendAsync(request))
                {
                    var data = await response.Content.ReadAsStringAsync();
                    var networks = JsonConvert.DeserializeObject<AvailableNetworksObject>(data);
                    this.Networks = networks.AvailableNetworks;

                    //this.Status = "Refresh Wifi Succeeded";
                }
            }
            foreach (var item in this.Networks)
            {
                if (item.AlreadyConnected == true)
                {
                    display.ClearDisplayBuf();
                    display.WriteLineDisplayBuf(item.SignalQuality.ToString(), 0, 0);
                    display.DisplayUpdate();
                }
            }
        }

0 ответов

Другие вопросы по тегам