Windows Phone ContactPicker 无法正确等待
Windows Phone ContactPicker won't await properly
虽然这之前已经在 Whosebug 上发布过,但我认为其中 none 反映了我的问题,并且 none 这些解决方案也对我有用。所以我正在开发一个 Windows Phone 应用程序,我的工作流程有点像这样:
- 应用启动
- ContactPicker 打开
- 用户选择了一个或多个联系人
- 根据他选择的联系人数量,将多少 PivotItem 添加到数据透视表中。
我的代码如下:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// TODO: Prepare page for display here.
// TODO: If your application contains multiple pages, ensure that you are
// handling the hardware Back button by registering for the
// Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
// If you are using the NavigationHelper provided by some templates,
// this event is handled for you.
SelectContacts();
}
private async Task SelectContacts()
{
var picker = new ContactPicker();
picker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
ContactsList = (List<Contact>)await picker.PickContactsAsync();
DisplayContacts();
}
private void DisplayContacts()
{
if (ContactsList != null)
{
foreach (var item in ContactsList)
{
PivotItem pivotItem = new PivotItem();
pivotItem.Header = item.FirstName.ToString();
ContentRoot.Items.Add(pivotItem);
}
}
}
根据我的说法,在 SelectContacts() 方法中,应用程序应该在等待调用时等待,一旦它返回联系人列表,它应该执行 DisplayContacts() 方法但它不起作用。我已经尝试了此代码的多个其他变体,但它们也不起作用。
等待 SelectContacts() 方法并在其下方添加 DisplayContacts() 方法。从 SelectContacts()
移除 DisplayContacts() 方法
await SelectContacts();
DisplayContacts();
我不知道完整的原因,但我想通了,因为我在 OnNavigatedTo() 事件中进行了 PickContactsAsync() 调用,这就是它没有按预期工作的原因。一旦我将 PickContactsAsync() 调用移动到 PageLoaded() 事件处理程序中,它就开始照常工作。
虽然这之前已经在 Whosebug 上发布过,但我认为其中 none 反映了我的问题,并且 none 这些解决方案也对我有用。所以我正在开发一个 Windows Phone 应用程序,我的工作流程有点像这样:
- 应用启动
- ContactPicker 打开
- 用户选择了一个或多个联系人
- 根据他选择的联系人数量,将多少 PivotItem 添加到数据透视表中。
我的代码如下:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
// TODO: Prepare page for display here.
// TODO: If your application contains multiple pages, ensure that you are
// handling the hardware Back button by registering for the
// Windows.Phone.UI.Input.HardwareButtons.BackPressed event.
// If you are using the NavigationHelper provided by some templates,
// this event is handled for you.
SelectContacts();
}
private async Task SelectContacts()
{
var picker = new ContactPicker();
picker.DesiredFieldsWithContactFieldType.Add(ContactFieldType.PhoneNumber);
ContactsList = (List<Contact>)await picker.PickContactsAsync();
DisplayContacts();
}
private void DisplayContacts()
{
if (ContactsList != null)
{
foreach (var item in ContactsList)
{
PivotItem pivotItem = new PivotItem();
pivotItem.Header = item.FirstName.ToString();
ContentRoot.Items.Add(pivotItem);
}
}
}
根据我的说法,在 SelectContacts() 方法中,应用程序应该在等待调用时等待,一旦它返回联系人列表,它应该执行 DisplayContacts() 方法但它不起作用。我已经尝试了此代码的多个其他变体,但它们也不起作用。
等待 SelectContacts() 方法并在其下方添加 DisplayContacts() 方法。从 SelectContacts()
移除 DisplayContacts() 方法await SelectContacts();
DisplayContacts();
我不知道完整的原因,但我想通了,因为我在 OnNavigatedTo() 事件中进行了 PickContactsAsync() 调用,这就是它没有按预期工作的原因。一旦我将 PickContactsAsync() 调用移动到 PageLoaded() 事件处理程序中,它就开始照常工作。