2016-11-15 4 views
1

Der Versuch, den WiFi-Adapter auf einem Raspberry Pi 3, mit Windows 10 IoTWin10 IoT + RPI3 WiFiAdapter wirft Zugriff verweigert

-Code zu verwenden, ich versuche zu laufen:

private async Task<IEnumerable<string>> ScanNetworksAsync() 
    { 
     var access = await WiFiAdapter.RequestAccessAsync(); 

     if (access != WiFiAccessStatus.Allowed) 
     { 
      throw new Exception("Not Allowed to use WiFi"); 
     } 

     var wifi = WiFiAdapter.FindAllAdaptersAsync().AsTask().Result[0]; 

     await wifi.ScanAsync(); 

     return wifi.NetworkReport.AvailableNetworks.Select(n => n.Ssid); 
    } 

habe ich die Fähigkeit in der Package.appxmanifest definiert:

<DeviceCapability Name="wiFiControl" /> 

Wenn es wifi.ScanAsync() auszuführen versucht, es wirft nur diesen Fehler:

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

Was vermisse ich oder mache ich falsch?

+0

Welche Art von Ihrem WiFi-Adapter? –

+0

der Bord-rpi3 – Wedge

Antwort

2

Ich habe es herausgefunden. Es ist etwas unklar oder fehlt nur in der Dokumentation.

Alle WLAN-Befehle wie ScanAsync()ConnectAsync() können nicht im UI-Thread ausgeführt werden. Ich habe sie in einem separaten Thread ausgeführt, aber ich blockierte immer noch die Benutzeroberfläche (war mir egal, weil es nur eine Test-App ist). Anscheinend ist das nicht erlaubt.

fand ich einen Kommentar in der Probe App:

 // RequestAccessAsync must have been called at least once by the app before using the API 
     // Calling it multiple times is fine but not necessary 
     // RequestAccessAsync must be called from the UI thread 

Welche RequestAccessAsync() nur bedeutet, arbeitet im UI-Thread, wenn ausgeführt werden. Ich habe es auf beide Arten getestet und es scheint zu funktionieren, egal wo es läuft.