1
我正在開發一個應用程序,並且遇到了異步調用的問題...以下是我正在嘗試執行的操作。Windows Phone 7 - 等待Webclient完成
該應用程序使用JSON API,並在運行時使用必要的值(即單個新聞文章)填充全景項目中的列表框。當用戶選擇ListBox項目時,SelectionChanged事件被觸發 - 它從選定的項目中拾取articleID,並將其傳遞給Update方法以下載文章的JSON響應,使用JSON.NET對其進行反序列化,用戶轉到WebBrowser控件,該控件根據收到的響應呈現html頁面。
問題在於,我必須等待響應,然後再啓動NavigationService,但我不確定如何正確執行此操作。這樣,代碼運行「太快」,我沒有及時得到我的迴應來呈現頁面。
事件碼:
private void lstNews_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (lstNews.SelectedIndex == -1)
{
return;
}
ShowArticle _article = new ShowArticle();
ListBox lb = (ListBox)sender;
GetArticles item = (GetArticles)lb.SelectedItem;
string passId = ApiRepository.ApiEndpoints.GetArticleResponseByID(item.Id);
App.Current.JsonModel.JsonUri = passId;
App.Current.JsonModel.Update();
lstNews.SelectedIndex = -1;
NavigationService.Navigate(new Uri("/View.xaml?id=" + item.Id, UriKind.Relative));
}
的OnNavigatedTo方法在View:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
long sentString = long.Parse(NavigationContext.QueryString["id"]);
string articleUri = ApiRepository.ApiEndpoints.GetArticleResponseByID(Convert.ToInt32(sentString));
//this throws an error, runs "too fast"
_article = App.Current.JsonModel.ArticleItems[0];
}
的更新方法:
public void Update()
{
ShowArticle article = new ShowArticle();
try
{
webClient.DownloadStringCompleted += (p, q) =>
{
if (q.Error == null)
{
var deserialized = JsonConvert.DeserializeObject<ShowArticle>(q.Result);
_articleItems.Clear();
_articleItems.Add(deserialized);
}
};
}
catch (Exception ex)
{
//ignore this
}
webClient.DownloadStringAsync(new Uri(jsonUri));
}
謝謝!正是我需要它做的。 – zpodbojec
在這種情況下,如果它回答你的問題,請接受答案。 –