我想寫一個抓取聯繫人的方法,並將其轉換爲數據對象並將其返回。我明白,由於聯繫人搜索是異步的,調用方法也需要;但是,我想返回一個對象作爲調用搜索的父方法的一部分,我不確定最佳方法是什麼。如何將異步聯繫人搜索的結果傳遞迴調用方法?
我目前得到的僞代碼:
public Person GetRandomPerson(string s)
{
Person myPerson = new Person();
Person contacts = new Contacts();
contacts.SearchCompleted += new EventHandler<ContactsSearchEventArgs>(contacts_SearchCompleted);
contacts.SearchAsync(String.Empty, FilterKind.None, "All Contacts");
return Person; //I'm not sure how this will ever work...
}
void contacts_SearchCompleted(object sender, ContactsSearchEventArgs e)
{
//convert a Contact object to Person object here
}
我已經做了一下週圍的地方(like this SO question)讀書,但我不太清楚如何嵌套的異步調用返回會看起來像,或者我如何將來自基於事件的異步聯繫人搜索的結果傳回到父調用方法 - 我如何實現這種效果?
直接調用'GetRandomPerson'的人(不知道PersonService的內部)會被阻塞。這與我的回答沒有多大區別。我認爲,在一個線程中調用'GetRandomPerson'應該在'PersonService'中處理 –
我想將後臺線程移動到PersonService可能會更好 - 但我仍然需要將整個調用推送到後臺線程以保持UI線程正在運行,所以這就是爲什麼我保持原樣。 –