locked
WebRequest RRS feed

  • Вопрос

  • Здравствуйте! Скажите пожалуйста, как правильно посылать запрос и выводить то что получил в текстблок. Я мучился 2 часа, так и ничего не получилось, скину свой кривой код, может подскажите что-нибудь по нему:

    private void Button_Click(object sender, RoutedEventArgs e)
            {
                WebRequest request = WebRequest.Create("http://api.steampowered.com/ISteamWebAPIUtil/GetServerInfo/v1");
                request.BeginGetResponse(OnResponse, request);
            }
    
    async void OnResponse(IAsyncResult ar)
            {
                WebRequest request = (HttpWebRequest)ar.AsyncState;
                WebResponse response = request.EndGetResponse(ar);
    
                using (var responseStream = response.GetResponseStream())
                {
                    var sr = new StreamReader(responseStream);
                    var src = sr.ReadToEnd();
                    JObject data = JObject.Parse(src);
                    CoreDispatcher dispatcher = CoreWindow.GetForCurrentThread().Dispatcher;
                    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                        {
                            Block.Text = unixTimestamp((long)data["servertime"]).ToString();
                            Block2.Text = (String)data["servertimestring"];
                        });
                    
                }
            }
    
    private DateTime unixTimestamp(long timestamp)
            {
                DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
                return origin.AddSeconds(timestamp);
            }

    И ещё у меня вопрос, когда я вызываю метод BeginGetResponse(OnResponse, request) на главной странице, то при отладке он переходит внутрь(на метод OnResponse), а когда создаю отдельный класс и там его вызываю - то нет, это так должно быть или в чём проблема?


    • Изменено nnn93 29 ноября 2014 г. 19:30
    29 ноября 2014 г. 19:29

Ответы

  • Надо было так делать : 

    await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,  () => 
                    { 
                        Block.Text = unixTimestamp((long)data["servertime"]).ToString();
                        Block2.Text = (String)data["servertimestring"];
                    });

    • Помечено в качестве ответа nnn93 30 ноября 2014 г. 8:46
    30 ноября 2014 г. 8:46