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 関数で、後で出力できるように responsestring 文字列を返すにはどうすればよいですか?

4

1 に答える 1

0

あなたが実際にやろうとしているのは、次々と続く 2 つの非同期操作です。BeginXxxメソッドが終了する前にメソッドが返されることを覚えておく価値があります。したがって、あなたのケースでは、要求ストリームに書き込みを要求し、すぐに悪いことが起こります。

オープンソース コードなど、他の例を見る価値があるかもしれませんBeginGetResponseEndGetRequestStream

于 2012-06-11T18:07:28.580 に答える