Задать вопрос

Как создать синхронный запрос в windows phone 8?

Суть в следующем, приложение погружает при запуске данные в JSON и сохраняет в изолированное хранилище. Как выяснилось в wp8 WebClient не содержит синхронного запроса, только асинхронный.

У меня идёт так.
JsonObj JsonObj = new JsonObj();

В конструкторе проверяется существование наличие в изолированном хранилище строки данных в json, если таковой не имеется, то делается запрос на сервер и данные сохраняются в изолированное хранилище и десериализуются. и далее по задумке идёт работа с данными.
JsonObj JsonObj = new JsonObj();
MainNewsList.ItemsSource = JsonObj.MAIN_NEWS;
NewsList.ItemsSource = JsonObj.NEWS;

Проблема в том, что загрузка данных в конструкторе JsonObj идёт асинхронно.
И как следствие в
MainNewsList.ItemsSource = JsonObj.MAIN_NEWS;
NewsList.ItemsSource = JsonObj.NEWS;

ничего нет, и при первой загрузке приложения получаю пустую страницу.

Как сделать синхронный http запрос?
  • Вопрос задан
  • 2721 просмотр
Подписаться 5 Оценить Комментировать
Решения вопроса 1
ad1Dima
@ad1Dima
Ответ на поставленный вопрос: НИКАК!
Пояснение: НЕ НАДО ТАК!

Синхронные запросы на сервер были убраны СПЕЦИАЛЬНО, что бы у любителей грузить данные в UI потоке не было такой возможности.

Повесьте progress bar на время загрузки, а когда данные загрузятся - выведите их, ничего сложного в этом нет. Для синтаксического сахара можно ещё установить Async CTP.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
ad1Dima
@ad1Dima
В конструкторе класса принимайте Action
public JsonObj(Action callback)
{
   //...
}

этот экшн вызывайте по окончанию загрузки callback.Invoke();

при создании экземпляра передайте лямбду
JsonObj JsonObj = new JsonObj(()=>
{
MainNewsList.ItemsSource = JsonObj.MAIN_NEWS;
NewsList.ItemsSource = JsonObj.NEWS;
});
Ответ написан
Комментировать
@SZolotov
Asp.net core, MAUI,WPF,Qt, Avalonia
Синхронно можно загружать, но зачем?
Для HttpClient (есть одноименный nuget) будет что-то типа такого: var client = new HttpClient(); var result = client.GetStringAsync(/*ваш урл*/).Result;
Ответ написан
Комментировать
webkornevand
@webkornevand Автор вопроса
НАшёл, установил.
var a = client.GetStringAsync("URL").Result.ToString();

приложение просто в бесконечном ожидании.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы