2015-02-07 43 views
0

儘管此前已在StackOverflow上發佈,但我認爲這些反映了我的問題,並且這些解決方案都不適用於我。所以,我正在開發一個Windows Phone應用程序和我的工作流程是有點像這樣:Windows Phone ContactPicker將不會正常等待

  • 應用開始
  • ContactPicker開闢了
  • 用戶選擇一個或多個聯繫人
  • 基於有多少接觸,他選中,許多PivotItems被添加到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()方法,但它不起作用。我試過這個代碼的多個其他變體,他們也不工作。

+0

「不工作」是什麼意思? – i3arnon 2015-02-07 07:30:15

+0

@ i3arnon它沒有以正確的順序運行。等待後的任何事情都應該在該行完全執行後運行,但在我的情況下,它不會等待await行完全執行。 – haseebahmed7 2015-02-07 08:40:06

+0

你是什麼意思「等待後的任何事情」。我向你保證,DisplayContacts只會在等待的操作完成後才運行。還有別的嗎? – i3arnon 2015-02-07 08:43:33

回答

0

我不知道爲什麼,但我理解了它,因爲我是做了PickContactsAsync()調用中的OnNavigatedTo()事件,這是一個完整的理由爲什麼它沒有按預期工作。一旦我將PickContactsAsync()調用移入PageLoaded()事件處理程序,它就像往常一樣開始工作。

1

等待SelectContacts()方法並在其下添加DisplayContacts()方法。卸下SelectContacts的DisplayContacts()()方法

await SelectContacts(); 
DisplayContacts(); 
+0

也嘗試過。不起作用。我仍然可以看到在我的模擬器上運行的ContactPicker,而DisplayContacts()不等待SelectContacts()並開始執行。 – haseebahmed7 2015-02-07 05:06:03

+0

儘量不要列出。相反,請執行以下操作: 'var contacts = await picker.getContactsAsync();如果(contacts!= null) ContactsList =(List )contacts;' – 2015-02-07 05:15:45

+0

試過了,以及。不起作用,結果相同。 – haseebahmed7 2015-02-07 05:22:47