Windows Phone ContactPicker не будет ожидать должным образом
Хотя это было опубликовано ранее в Stackru, но я думаю, что ни один из них не отражает мою проблему, и ни одно из этих решений не работает для меня. Поэтому я занимаюсь разработкой приложения для Windows Phone, и мой рабочий процесс выглядит примерно так:
- Приложение запускается
- ContactPicker открывается
- Пользователь выбирает один или несколько контактов
- В зависимости от того, сколько контактов он выбрал, в 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(), но он не работает. Я пробовал несколько других вариантов этого кода, и они тоже не работают.
2 ответа
Я не знаю полной причины, но я понял, что, так как я делал вызов PickContactsAsync () в событии OnNavigatedTo (), именно поэтому он не работал должным образом. Как только я переместил вызов PickContactsAsync () в обработчик событий PageLoaded (), он начал работать как обычно.
Дождитесь метода SelectContacts() и добавьте метод DisplayContacts() под ним. Удалите метод DisplayContacts() из SelectContacts()
await SelectContacts();
DisplayContacts();