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太像代碼以上。

相關問題