在我的WP7应用程序中,我正在使用这些方法调用和使用Web服务:
在我的页面.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);
}
问题是json类中的OpenReadCompletedTest方法在
之后没有被调用 webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTestAgence);
因此返回的listAgences为空。
但后来OpenReadCompletedTest被调用,所有内容都被罚款,但我的视图已被加载。
在解析webservice响应并填充我的列表后,我可以做些什么来进行同步调用或重新加载我的视图。
答案 0 :(得分:0)
您看到的行为(问题)是因为网络请求是asynchronously。
如果您想要一个单独的对象调用Web服务器,则需要处理回调以处理响应或自行进行适当的更改。
此外:
- 问题中的代码未显示变量json
的定义。在Page_Loaded
中,它看起来像是自定义类,但在OpenReadCompletedTestAgence
和addAgencesToList
中,它看起来像一个字符串。
- Page_Loaded
中的代码将listAgences
的值设置为两次。
查看以下问题,了解有关同步拨打Faking synchronous calls in Silverlight WP7
的更多信息