2013-06-25 2 views
0

Я использую следующий код для отправки данных на сервер с Windows Phone 8.Как узнать, когда запрос после завершения асинхронной КР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

У вас уже есть методы в месте, дозвонились, когда запрос завершен. В вашем методе GetResponseCallback у вас должен быть обновленный responseString. Вы можете поднять событие в этом методе, чтобы другие классы могли обрабатывать responseSring обновлений или обрабатывать логику в самом методе.

См. Также introduction to event based programming in C#.