Windows Phone ContactPicker 无法正确等待

Windows Phone ContactPicker won't await properly

虽然这之前已经在 Whosebug 上发布过,但我认为其中 none 反映了我的问题,并且 none 这些解决方案也对我有用。所以我正在开发一个 Windows Phone 应用程序,我的工作流程有点像这样:

我的代码如下:

    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() 事件处理程序中,它就开始照常工作。