ContactPicker无法在Windows Phone 8.1 Silverlight中工作

本文关键字:Silverlight 工作 Phone Windows ContactPicker | 更新日期: 2023-09-27 18:27:03

我试图通过以下快速启动在Windows Phone 8.1 SL应用程序中获取联系人信息:选择用户联系人

在我的职能中,

    private async void PickAContactButton_Click(object sender, RoutedEventArgs e)
    {
        var contactPicker = new Windows.ApplicationModel.Contacts.ContactPicker();
        contactPicker.desiredFieldsWithContactFieldType.add(Windows.ApplicationModel.Contacts.ContactFieldType.email);
        Contact contact = await contactPicker.PickContactAsync(); // this throws System.NotImplementedException
        // Additional information: The method or operation is not implemented.
        if (contact != null)
        { ... }
     }

完全相同的功能在Windows Phone 8.1 RT中工作。根据此参考,WP 8.1 RT和WP 8.1 SL都支持ContactPicker类。

知道发生了什么事吗?

ContactPicker无法在Windows Phone 8.1 Silverlight中工作

我今天在我的Win 8.1通用商店应用程序中出现了这种行为,所以这可能会帮助你。不过,我有不同的异常(FileNotFoundException和普通的System.Exception),所以我真的不确定这是同一个问题。

就我的实验而言,这就是目前使ContactPicker工作所需要的:

  • 必须在UI线程中创建ContactPicker实例
  • contactPicker.DesiredFieldsWithContactFieldType必须只有一个项(0个或>1个项会产生异常)

这就是我最终所做的:

// using Windows.ApplicationModel.Core;
// in an async method:
Contact user = null;
AutoResetEvent resetEvent = new AutoResetEvent(false);
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
    CoreDispatcherPriority.Normal, 
    (async ()=>{
      ContactPicker contactPicker = new ContactPicker();
      contactPicker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
      user = await contactPicker.PickContactAsync();
      resetEvent.Set();
    }
);
resetEvent.WaitOne();
if (user != null) {
    // do smth
}