如何知道异步发布请求何时完成WP8

时间:2013-06-25 05:17:54

标签: c# http post asynchronous windows-phone-8

我正在使用以下代码从Windows Phone 8向服务器发送数据。

responseString将成为默认值。

但是如果在几秒钟后检查它就会更新。

有没有办法知道请求何时完成

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.IO;
using System.Text;

namespace Blood_Bank
{
    public partial class Page1 : PhoneApplicationPage
    {
        String responseString = "amit";
        public event Action Completed;
        StringBuilder postData = new StringBuilder();
        public Page1()
        {
            InitializeComponent();
        }


        private void submit_Click(object sender, RoutedEventArgs e)
        {
            // Create a new HttpWebRequest object
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.mywindowsproject.appspot.com");

            //   request.ContentType = "text/html";

            // Set the Method property to 'POST' to post data to the URI.
            request.Method = "POST";

            // start the asynchronous operation

            postData.Append("name=" + name.Text.ToString()+"&");


            request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);


                MessageBox.Show(responseString);         

        }
        private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
        {

            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

            // End the operation
            Stream postStream = request.EndGetRequestStream(asynchronousResult);


            // Convert the string into a byte array. 
            byte[] byteArray = Encoding.UTF8.GetBytes(postData.ToString());

            // Write to the request stream.
            postStream.Write(byteArray, 0, postData.Length);
            postStream.Close();

            // Start the asynchronous operation to get the response
            request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
        }
        private void GetResponseCallback(IAsyncResult asynchronousResult)
        {
            HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

            // End the operation

            try
            {


                HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
                Stream streamResponse = response.GetResponseStream();
                StreamReader streamRead = new StreamReader(streamResponse);
                responseString = streamRead.ReadToEnd();

                streamResponse.Close();
                streamRead.Close(); response.Close();
                if (Completed != null)
                    Completed();

            }
            catch (WebException e)
            {

            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您已经拥有在请求完成时调用的方法。在您的方法GetResponseCallback中,您应该有更新的responseString。您可以在该方法中引发一个事件,以便其他类可以处理更新responseString,或者处理方法本身的逻辑。

另见introduction to event based programming in C#