0

我正在尝试为 wp7 创建一个应用程序以登录维基百科并帮助翻译页面。我一开始就被卡住了,因为我无法通过 mediawiki API 登录。代码的相关部分如下所示:

        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 上,我无法从主函数传递数据字符串。我该怎么做呢?

在 GetResponseCallback 函数上,如何返回响应字符串以便稍后输出?

4

1 回答 1

0

您实际上尝试做的是两个异步操作,一个接一个 - 值得记住的是BeginXxx方法在完成之前返回 - 所以在您的情况下,您请求写入请求流,并立即请求回应,所以不好的事情就会接踵而至。

可能值得查看其他示例,例如开源代码中的示例- 您会看到BeginGetResponse在完成写入由返回的流之前通常不会调用EndGetRequestStream

于 2012-06-11T18:07:28.580 回答