2012-06-11 53 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是别的东西,那么继续前进。无论如何,我可能不得不在晚些时候学习开始方法。 –