我正在使用以下代码从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)
{
}
}
}
}
答案 0 :(得分:1)
您已经拥有在请求完成时调用的方法。在您的方法GetResponseCallback中,您应该有更新的responseString。您可以在该方法中引发一个事件,以便其他类可以处理更新responseString,或者处理方法本身的逻辑。