private void ResponseCallback(IAsyncResult asyncResult) { try { HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); using (StreamReader sr = new StreamReader(response.GetResponseStream())) { ObservableCollection<HighScore> highScores = new ObservableCollection<HighScore>(); JArray ja = JArray.Parse(sr.ReadToEnd()); // Populate high scores list. for (int i = 0; i < ja.Count; i++) { JObject jo = (JObject)ja[i]; HighScore hs = new HighScore(i + 1, (string)jo["player"], (int)jo["score"], DateTime.FromFileTimeUtc(long.Parse((string)jo["ts"]))); highScores.Add(hs); } LeaderboardViewModel lbvm = new LeaderboardViewModel(highScores); LayoutRoot.Dispatcher.BeginInvoke(new Action(() => { LayoutRoot.DataContext = lbvm; })); if (!string.IsNullOrEmpty(NewPlayer) && Score != null) { for (int i = 0; i < lbvm.HighScores.Count; i++) { HighScore hs = lbvm.HighScores[i]; if (hs.Player.Equals(NewPlayer) && hs.Score == Score) { ScoresListBox.Dispatcher.BeginInvoke(new Action(() => { ScoresListBox.SelectedIndex = i; })); break; } } } } } catch (Exception) { // Run on UI thread. Probably a better place to get dispatcher from than LayoutRoot LayoutRoot.Dispatcher.BeginInvoke(new Action(() => { MessageBox.Show("Unable to get scores. Are you connected to the internet?"); })); } }
private void GetHighScoresResponseCallback(IAsyncResult asyncResult) { try { HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); ObservableCollection<HighScore> highScores = new ObservableCollection<HighScore>(); using (StreamReader sr = new StreamReader(response.GetResponseStream())) { JArray ja = JArray.Parse(sr.ReadToEnd()); // Populate high scores list. for (int i = 0; i < ja.Count; i++) { JObject jo = (JObject)ja[i]; HighScore hs = new HighScore(i + 1, (string)jo["player"], (int)jo["score"], DateTime.FromFileTimeUtc(long.Parse((string)jo["ts"]))); highScores.Add(hs); } } if (highScores.Count < 20 || scoreViewModel.Score > highScores[highScores.Count - 1].Score) { SubmitHighScoreButton.Dispatcher.BeginInvoke(() => { SubmitHighScoreButton.Visibility = System.Windows.Visibility.Visible; }); } } catch (Exception) { // Do nothing } }