ContactPicker无法在Windows Phone 8.1 Silverlight中运行

ToM*_*ika 5 c# silverlight contactpicker windows-phone-8.1

我试图通过以下快速入门获取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)
        { ... }
     }
Run Code Online (Sandbox Code Playgroud)

完全相同的功能适用于Windows Phone 8.1 RT.ContactPicker根据此参考, WP 8.1 RT和WP 8.1 SL均支持class .

知道发生了什么事吗?

Nox*_*tis 1

我今天在 Win 8.1 的通用商店应用程序中遇到了这种情况,所以这可能对您有帮助。不过,我有不同的异常(FileNotFoundException 和普通的 System.Exception),所以我不确定这是同一个问题。

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

  • ContactPicker实例必须在UI线程中创建
  • 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
}
Run Code Online (Sandbox Code Playgroud)