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();
Другие вопросы по тегам