2014-10-05 41 views
0

我正在開發一個應用程序,其中用戶在文本框中輸入一個句子。我用的是TextBox.Text方法來獲得在TextBox作爲一個字符串文本,我調用一個方法getTranslation(),它在內部調用幾個異步回調,因爲它需要如何使方法暫停執行,直到先前使用異步回調調用的方法完成

  • 建立連接到服務器
  • 寫請求POST流從服務器
  • 獲取響應回調
  • 過程中的響應
  • 返回響應到XAML頁面

在應用程序的xaml頁面中,我首先調用傳遞輸入文本作爲參數的第一個方法。然後下一行代碼調用返回響應方法並將TextBlock內容設置爲返回的響應。

這些是我用來調用服務器的方法。

public void searchOnline(string inputtxt) 
     { 
     //Lines of code 
      IAsyncResult writeRequestStreamCallback = 
       (IAsyncResult)req.BeginGetRequestStream(new AsyncCallback(RequestStreamReady), req); 
     } 
     private void RequestStreamReady(IAsyncResult ar) 
     { 
     //Lines of code 
      request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request); 
     } 
     private void GetResponseCallback(IAsyncResult ar) 
     { 
      //Lines of code 
       IAsyncResult writeRequestStreamCallback = (IAsyncResult)serviceWebRequest.BeginGetResponse(new AsyncCallback(ServiceReady), serviceWebRequest); 
     } 
     private void ServiceReady(IAsyncResult ar) 
     { 
     //Lines of code 
      System.IO.StreamReader streamRead = new System.IO.StreamReader(streamResponse); 
      string responseString = streamRead.ReadToEnd(); 
      searchresult = responseString; 
     } 

     public string returner() 
     { 
      return searchresult; 
     } 

在XAML頁面我叫下面的代碼

help.searchOnline(inputtextbox.Text);//line 1 
           outputtextbox.Text = help.returner();//line 2 
           outputtextbox.UpdateLayout(); 

我的問題是如何使收益法在XAML頁面等待即行2,更新文本塊,直到響應收到,即直到第1行更新搜索結果字符串?

回答

0

只能同步重寫方法。您只想繼續使用OutputTextBox中的顯示來運行程序。因此,應該等待獲取數據的過程。

但是如果你需要在此過程中執行其他操作,您可以使用一個任務: (http://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx

通過這個類,你可以將對象(TResult)分配給操作的返回,所以檢查你的狀態,並通過屬性進行你想要的方式,例如:

public bool IsCompleted {get; }

這將告訴你,如果SearchOnline就完成了!

除了這個屬性,還有一些方法,比如Wait,這些方法實際上等待Task完成執行,即等待方法SearchOnline更新OutputTextBox。

我想重申,研究Class System.Threading.Tasks.Task的功能將會非常好。

我希望它有幫助:)