应用程序被快照时,我可以使用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:
答案 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;
}