При получении доступа отказано в исключении при вызове 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?

1 ответ

Решение

Вам не нужно ничего декларировать. Метод просто вызывается слишком рано.

Поэтому вместо вызова в конструкторе вызывайте его сразу после создания окна -

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 также поддерживается, как в коде выше.

Другие вопросы по тегам