В моем приложении WP7 я вызываю и использую веб-сервис с этими методами:
В моем файле .cs страницы:
public void Page_Loaded(object sender, RoutedEventArgs e)
{
if (NavigationContext.QueryString["val"] == "One")
{
listAgences=JSON.callWSAgence("http://...");
InitializeComponent();
DataContext = this;
}
}
В моем классе json у меня есть следующие методы:
public List<Agence> callWSAgence(string url)
{
WebClient webClient = new WebClient();
Uri uri = new Uri(url);
webClient.OpenReadAsync(uri);
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTestAgence);
return listAgences;
}
public void OpenReadCompletedTestAgence(object sender, OpenReadCompletedEventArgs e)
{
StreamReader reader = new System.IO.StreamReader(e.Result);
jsonResultString = reader.ReadToEnd().ToString();
addAgencesToList();
reader.Close();
}
public void addAgencesToList()
{
jsonResultString = json.Substring(5, json.Length - 6);
listAgences = JsonConvert.DeserializeObject<List<Agence>>(json);
}
Проблема в том, что метод OpenReadCompletedTest в классе json не вызывается сразу после
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTestAgence);
Таким образом, возвращаемое listAgences пусто.
Но позже OpenReadCompletedTestвызывается, и все работает оштрафовано, но мое представление уже загружено.
Что я могу сделать, чтобы выполнить своего рода синхронный вызов или перезагрузить мое представление после анализа ответа веб-службы и заполнения моего списка.