Windows Phone ContactPicker 无法正常等待
Posted
技术标签:
【中文标题】Windows Phone ContactPicker 无法正常等待【英文标题】:Windows Phone ContactPicker won't await properly 【发布时间】:2015-04-07 08:38:41 【问题描述】:虽然这已经在 *** 上发布过,但我认为这些都没有反映我的问题,而且这些解决方案也没有一个对我有用。所以我正在开发一个 Windows Phone 应用程序,我的工作流程有点像这样:
应用启动 ContactPicker 打开 用户选择一个或多个联系人 根据他选择的联系人数量,将多少 PivotItem 添加到 Pivot 中。我的代码如下:
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() 方法中,应用程序应该在 await 调用中等待,一旦它返回联系人列表,它应该执行 DisplayContacts() 方法但它不起作用。我已经尝试了此代码的多种其他变体,但它们也无法正常工作。
【问题讨论】:
“不工作”是什么意思? @i3arnon 它的运行顺序不正确。 await 之后的任何内容都应该在该行完全执行后运行,但在我的情况下,它不会等待 await 行完全执行。 “等待之后的任何事情”是什么意思。我向您保证DisplayContacts
只会在等待的操作完成后运行。还有别的吗?
@i3arnon 这正是问题所在。 DisplayContacts 在等待完成之前运行。我知道它不应该那样做,但确实如此。
我很难相信。如果你调用 PickContactAsync().Result 会发生什么。它的行为是否相同?
【参考方案1】:
等待 SelectContacts() 方法并在其下方添加 DisplayContacts() 方法。从 SelectContacts() 中移除 DisplayContacts() 方法
await SelectContacts();
DisplayContacts();
【讨论】:
也试过了。不工作。我仍然可以看到 ContactPicker 在我的模拟器上运行,而 DisplayContacts() 不等待 SelectContacts() 并开始执行。 尽量不要将 await 转换为 List我不知道完整的原因,但我发现由于我在 OnNavigatedTo() 事件中进行 PickContactsAsync() 调用,这就是它没有按预期工作的原因。一旦我将 PickContactsAsync() 调用移到 PageLoaded() 事件处理程序中,它就开始照常工作。
【讨论】:
以上是关于Windows Phone ContactPicker 无法正常等待的主要内容,如果未能解决你的问题,请参考以下文章
Windows Phone 应用程序仅适用于 Windows Phone 7?
windows phone 8 和 10 的 windows phone 应用程序开发
是否可以将 Windows Phone App 项目转换为 Windows Phone 类库?
Windows Phone 8.0 DLL 是不是与 Windows Phone 8.1 应用程序兼容?
VS2010 Express for Windows Phone 有中文吗?那里有下载?官方的Windows Phone Developer Tools 是英文版