捕捉时使用ContactPicker合约

时间:2012-09-12 08:34:26

标签: windows-runtime winrt-xaml

应用程序被快照时,我可以使用ContactPicker合约吗?

var picker = new Windows.ApplicationModel.Contacts.ContactPicker();
picker.CommitButtonText = "Select";
picker.SelectionMode = Windows.ApplicationModel.Contacts.ContactSelectionMode.Fields;
picker.DesiredFields.Add(Windows.ApplicationModel.Contacts.KnownContactField.Email);
var contactInformation = await picker.PickSingleContactAsync();

以上代码在全屏模式下工作,但在捕捉到屏幕一侧时,会在调用PickSingleContactAsync()时抛出以下异常:

  

System.Runtime.InteropServices.COMException未被用户代码

处理      

HResult = -2147467259

     

消息=错误HRESULT已从调用COM组件返回E_FAIL。

     

源= mscorlib程序

     

ErrorCode = -2147467259

     

堆栈跟踪:          在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)          在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)          在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()          在TouchToneDtmf.MainPage.d__e.MoveNext()   在   d:\用户\富\ MainPage.xaml.cs中:线   556 InnerException:

1 个答案:

答案 0 :(得分:4)

应用程序被捕捉时无效 - 您应该在调用ContactPicker之前检查应用程序的可视状态。

在官方C#示例中,还有一个方法EnsureUnsnapped(),您可能会在实施此合同时发现有用。

  

每次调用文件[/ contact]选择器时,您必须首先确保您的文件   应用程序可以通过验证您的应用程序未被捕捉来显示文件[/ contact]选择器   或者,如果您的应用程序被快照,则可以将其解除绑定以便显示   文件选择器。 Source - How to save files through file pickers

using Windows.UI.ViewManagement;
//...
internal bool EnsureUnsnapped()
{
    bool unsnapped = ((ApplicationView.Value != ApplicationViewState.Snapped) || ApplicationView.TryUnsnap());
    return unsnapped;
}