2012-06-11 91 views
0

我正在嘗試爲wp7創建一個應用程序以登錄到維基百科並幫助翻譯這些頁面。 因爲我無法通過mediawiki API登錄,所以我被困在開頭。 代碼的相關部分是這樣的:在wp7上通過api登錄到mediawiki

 data.Append("action=login&lgname" + HttpUtility.UrlEncode(textBox1.Text)); 
     data.Append("&lgpassword=" + HttpUtility.UrlEncode(passwordBox1.Password)); 

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

     public void GetRequestStreamCallback(IAsyncResult asynchronousResult) 
     { 
      HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 
      Stream postStream = request.EndGetRequestStream(asynchronousResult); 
      byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString()); 
      postStream.Write(byteData, 0, data.Length); 
      postStream.Close(); 
     } 
     private static void GetResponseCallback(IAsyncResult asynchronousResult) 
     { 
      HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; 

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

      streamResponse.Close(); 
      streamRead.Close(); 

      response.Close(); 
    } 

的問題是:

在GetRequestStreamCallback我無法通過main函數的數據串。我該怎麼做呢?

在GetResponseCallback函數中,如何返回響應字符串String以便稍後輸出?

回答

0

你實際上試圖做的是兩個異步操作,一個接一個 - 值得記住的是BeginXxx方法在它們完成之前返回 - 所以在你的情況下,你要求請求流寫入,並立即要求迴應,那麼不好的事情會隨之而來。

這可能是值得看的其他例子,如在opensource code - 你會看到,你通常不會叫BeginGetResponse,直到你寫完由EndGetRequestStream

+0

我的代碼在這裏返回的流類似於到開始方法的msdn文檔中給出的那個。是否可以更改get方法的開始方法? Silverlight似乎並不認可它們。 –

+0

沒關係。我會以另一種方式做到這一點。檢查api.php?action = query&format = xml&meta = userinfo,如果id =「0」,則在加載登錄頁面的應用程序中打開Web瀏覽器。如果id是別的東西,那麼繼續前進。無論如何,我可能不得不在晚些時候學習開始方法。 –