1

Je reçois l'exception suivante quand je l'appelle CompositionCapabilities.GetForCurrentView.Obtenir l'accès est refusé exception lorsque vous appelez CompositionCapabilities.GetForCurrentView

System.UnauthorizedAccessException: 'L'accès est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) »

public App() 
{ 
    this.InitializeComponent(); 
    this.Suspending += OnSuspending; 

    // Exception happens here. 
    var capabilities = CompositionCapabilities.GetForCurrentView(); 
} 

La chose étrange est le code compile bien donc je suppose que l'API est disponible. Ai-je besoin de déclarer des fonctionnalités dans Package.appxmanifest?

+0

Astuce: ne jamais appeler quelque chose, même pas certains de vos propres classes, immédiatement après la App.InitializeComponent() ... il échouera très certainement. – LucaLindholm

Répondre

2

Vous n'avez pas besoin de déclarer quoi que ce soit. La méthode est simplement appelée trop tôt.

Ainsi, au lieu de l'appeler dans le constructeur, appelez juste après la fenêtre est créée -

protected override void OnWindowCreated(WindowCreatedEventArgs args) 
{ 
    if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 4)) 
    { 
     var capabilities = CompositionCapabilities.GetForCurrentView(); 
     var areEffectsSupported = capabilities.AreEffectsSupported(); 
     var areEffectsFast = capabilities.AreEffectsFast(); 
    } 

    base.OnWindowCreated(args); 
} 

Notez que vous souhaitez ajouter un contrôle pour voir si cette API est également pris en charge, comme dans le code au dessus.