locked
Два запроса один в другом RRS feed

  • Вопрос

  • Ребята, помогите! Это очень важно для меня...
    Есть вот такой код:

            public class StenaItem
            {
                public string user_name { get; set; }
                public string user_message { get; set; }
                public string user_img { get; set; }
            }
    
            public string name = "";
            public string img = "";
            public string message = "";
            public string id = "";
    
            void stena_1(object sender, OpenReadCompletedEventArgs e)
            {
                XDocument xml = XDocument.Load(e.Result);
                XElement element = xml.Root;
    
                foreach (XElement tweet in element.Descendants("post"))
                {
                    message = tweet.Element("text").Value;
                    MessageBox.Show(message);
    
                    id = tweet.Element("from_id").Value;
                    var c = new WebClient();
                    c.OpenReadCompleted += stena_2;
                    string uri = string.Format("https://api.vkontakte.ru/method/users.get.xml?uids={0}&fields=first_name,last_name,photo_medium_rec&access_token={1}", id, App.AccessToken);
                    c.OpenReadAsync(new Uri(uri));
                }
            }
            void stena_2(object sender, OpenReadCompletedEventArgs e)
            {
                XDocument xml = XDocument.Load(e.Result);
                XElement element = xml.Root.Element("user");
                name = string.Format("{0} {1}", element.Element("first_name").Value, element.Element("last_name").Value);
                img = element.Element("photo_medium_rec").Value;
    
                List<StenaItem> lst = new List<StenaItem>();
                StenaItem st = new StenaItem();
                st.user_name = name;
                st.user_img = img;
                st.user_message = message;
                lst.Add(st);
                stena.ItemsSource = lst;
                MessageBox.Show(st.user_name+st.user_message+st.user_img);
            }

    И, конечно же, последний кусок кода "stena_2" срабатывает только после завершения "stena_1". А значит - нормальная обработка происходит только для последнего запроса... Итого - в мою ленту попадает только последняя из имеющихся записей.

    Как это можно исправить?


    • Изменено newasssaa 6 мая 2012 г. 4:14
    6 мая 2012 г. 4:13

Ответы

  • Нужно перенести переменную 
    List<StenaItem> lst  = new List<StenaItem>();
     в поле класса. В метод stena2 до вызова асинхронного запроса перенести  
    stena.ItemsSource = lst;
    Изучайте основы ООП, да и программирования в частности.
    • Предложено в качестве ответа Viktor Borisov 10 мая 2012 г. 5:58
    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 12:55
    10 мая 2012 г. 5:58

Все ответы

  • Нужно перенести переменную 
    List<StenaItem> lst  = new List<StenaItem>();
     в поле класса. В метод stena2 до вызова асинхронного запроса перенести  
    stena.ItemsSource = lst;
    Изучайте основы ООП, да и программирования в частности.
    • Предложено в качестве ответа Viktor Borisov 10 мая 2012 г. 5:58
    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 12:55
    10 мая 2012 г. 5:58
  • newasssaa, попробуйте вариант предложенный Виктором, если он решит вашу проблему, то, пожалуйста, отметьте его сообщение как ответ.

    Спасибо.


    Для связи [mail]

    10 мая 2012 г. 8:00