2016-11-15 1 views
1

Essayer d'utiliser l'adaptateur Wi-Fi sur un Raspberry Pi 3, sous Windows 10 IdOWin10 IdO + RPI3 WiFiAdapter lance Access Denied

code Je suis en train de courir:

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); 
    } 

J'ai la capacité définie dans le Package.appxmanifest:

<DeviceCapability Name="wiFiControl" /> 

Quand il tente d'exécuter wifi.ScanAsync(), il lance simplement cette erreur:

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

Qu'est-ce qui me manque ou qui ne va pas?

+0

Quel type de votre adaptateur WiFi? –

+0

l'embarqué rpi3 – Wedge

Répondre

2

Compris. C'est quelque chose de peu clair ou qui manque dans la documentation.

Toutes les commandes wifi telles que ScanAsync()ConnectAsync() ne peuvent pas être exécutées dans le thread d'interface utilisateur. Je les courais dans un thread séparé, mais je bloquais toujours l'interface utilisateur de toute façon (ne se soucient pas parce que c'est juste une application de test). Apparemment, ce n'est pas autorisé.

J'ai trouvé un commentaire dans l'exemple d'application:

 // 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 

Ce qui implique RequestAccessAsync() ne fonctionne que si elle est exécutée dans le thread d'interface utilisateur. Je l'ai testé dans les deux sens, et il semble fonctionner peu importe où il est exécuté.