0

我正在使用以下代码从 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)
            {

            }
        }
    }
}
4

1 回答 1

1

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

另请参阅C# 中基于事件的编程的介绍

于 2013-06-25T08:53:17.403 回答