1

当我拨打CompositionCapabilities.GetForCurrentView时,出现以下异常。调用CompositionCapabilities.GetForCurrentView时,访问被拒绝异常

System.UnauthorizedAccessException:'访问被拒绝。 (异常来自HRESULT :0X80070005(E_ACCESSDENIED))”

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

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

奇怪的是代码编译行,所以我假设的API可用。我是否需要在Package.appxmanifest中声明任何功能?

+0

提示:不要在App.InitializeComponent()之后立即调用某些东西,甚至不要调用某些自己的类,它肯定会失败。 – LucaLindholm

回答

2

你不需要声明任何东西。该方法简单地称为太早。

因此而不是调用它的构造函数,调用后立即被创建的窗口 -

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

注意你将要增加一个检查,看看是否支持该API太像代码以上。

相关问题