UWP ExtendedExecution - 请求扩展执行时出错

Posted

技术标签:

【中文标题】UWP ExtendedExecution - 请求扩展执行时出错【英文标题】:UWP ExtendedExecution - Error when requesting Extended Execution 【发布时间】:2018-04-05 19:24:25 【问题描述】:

我有一个 UWP 应用程序,它在操作开始后触发的回调中请求扩展执行,如下所示:

private async void HandleOnSyncStart(ISyncStart msg)

    // request extended execution
    ExtendedExecutionResult result = await 
      Utils.ExtendedExecutionHelper.RequestExtendedExecutionSessionAsync();

,但我得到以下错误

The group or resource is not in the correct state to perform the 
 requested operation. (Exception from HRESULT: 0x8007139F)

RequestExtendedExecutionSessionAsync() 方法的返回调用中抛出错误,如下所示。这是堆栈跟踪:

   at Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession..ctor()
   at MyProject.UWP.Utils.ExtendedExecutionHelper.<RequestExtendedExecutionSessionAsync>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at MyProject.UWP.MainPage.<HandleOnSyncStart>d__65.MoveNext()

ExtendedExecutionHelper 静态类的 RequestExtendedExecutionAsync() 方法请求扩展执行会话,如下所示:

    public static async Task<ExtendedExecutionResult> RequestExtendedExecutionSessionAsync()
    
        ClearExtendedExecutionSession();  //first clear if any session granted

        var newSession = new ExtendedExecutionSession();
        newSession.Reason = ExtendedExecutionReason.Unspecified;
        newSession.Description = "Extended Execution Request";
        newSession.Revoked += OnExtendedExecutionSessionRevoked;

        ExtendedExecutionResult result = await newSession.RequestExtensionAsync();
        switch (result)
        
            case ExtendedExecutionResult.Allowed:
                Debug.WriteLine(string.Format("ExtendedExecutionHelper: ExtendedExecution allowed."));
                session = newSession;
                break;
            case ExtendedExecutionResult.Denied:
                Debug.WriteLine(string.Format("ExtendedExecutionHelper: ExtendedExecution denied."));
                newSession.Dispose();
                break;
        

        return result; //ERROR
    

【问题讨论】:

【参考方案1】:

这个异常是在ExtendedExecutionSession类的构造函数中抛出的。

堆栈跟踪: 在 Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession..ctor()

而这个异常可能是由

引起的

任何时候只能请求一个ExtendedExecutionSession;尝试在当前处于活动状态时创建另一个会话将导致 ExtendedExecutionSession 构造函数抛出异常。

所以看起来ClearExtendedExecutionSession 未能处理之前正在运行的会话。如果您的代码是从this page... 采用的,可能代码有一些细微的错误,如该页面上的一些 cmets 所示。

你可以展示你如何处理之前的运行会话。

【讨论】:

我知道该页面中的错误,我已修复它们。但是在实例化会话时我没有收到错误,请参阅错误的代码行。我认为它与多个 EES 无关,因为我没有从 EES ctor 调用中得到错误。谢谢 其实你是对的,我尝试一次又一次地调用EES c-tor,这正是我得到的。谢谢,

以上是关于UWP ExtendedExecution - 请求扩展执行时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何与 UWP 应用自动同步联系人?

通用 Windows (UWP) 范围滑块

broadFileSystemAccess UWP

广泛的文件系统访问 UWP

Xamarin 表单 - UWP 后退按钮?

如何在 UWP 使用 wpf 的 Trigger