开发者

Problem with asynchronous webservice response

开发者 https://www.devze.com 2023-01-23 10:11 出处:网络
In my WP7 application i\'m calling and consuming a webservice with these methods: In my page .cs file:

In my WP7 application i'm calling and consuming a webservice with these methods:

In my page .cs file:

    public void Page_Loaded(object sender, RoutedEventArgs e)
    {
        if (NavigationContext.QueryString["val"] == "One")
        {
            listAgences=JSON.callWSAgence("http://...");         

            InitializeComponent();
            DataContext = this;                
        }
    }

In my json class i have these methods :

    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);                    
    }

The problem is that the OpenReadCompletedTest method in the json class is not called right after

  webClient.OpenRea开发者_JS百科dCompleted += new OpenReadCompletedEventHandler(OpenReadCompletedTestAgence);

So the listAgences returned is empty.

But later OpenReadCompletedTest is called and everything works fined, but my view has already been loaded.

What can i do to have a kind of synchronous call or to reload my view after the webservice response being parsed and my list being filled.


The behaviour (problem) you are seeing is because the web request is made asynchronously.

If you want to have a separate object call the web server this will need to handle a callback to process the response or make appropriate changes itself.

Also:
- the code in the question doesn't show what the variable json is defined as. In Page_Loaded it looks like a custom class but in OpenReadCompletedTestAgence and addAgencesToList it looks like a string.
- the code in Page_Loaded sets the value of listAgences twice.

check out the following question for more information about making asychronous calls synchrously Faking synchronous calls in Silverlight WP7

0

精彩评论

暂无评论...
验证码 换一张
取 消