WP7 ,HttpWebRequest.BeginGetResponse,异步调用的回调函数不被执行

发布于 2021-11-14 01:58:48 字数 2144 浏览 459 评论 2

大家好。SDK WP7.1.

写了一个函数:

string getdataByUri(string param) {
            string result = "";
            try
            {
                HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create("http://192.168.120.71:8080/ExtJS/qv");
                request.Method = "post";

                //异步方法提交参数(将参数写入流中)
                IAsyncResult iac = request.BeginGetRequestStream(
                    ReadCallbackForPostParam,
                    new object[] { request, param });

                //挂起当前线程
                allDone.WaitOne();
              
                //异步方法获取Response
                allDone.Reset();
                IAsyncResult iac1 = request.BeginGetResponse(
                     ReadCallbackForGetData,
                     request);

                //----------运行到这,就一直挂起了,回调函数ReadCallbackForGetData始终不能被执行。
                //服务端代码我跟踪过,BeginGetResponse执行后,服务端能正确返回.
                //如果注释掉 allDone.WaitOne();,回调函数ReadCallbackForGetData能被执行
                 allDone.WaitOne();

                MessageBox.Show("成功返回");


            }
            catch (Exception err) {
                throw err;
            }
            return result;
        }

 

//回调函数,服务端返回后,应该执行这个函数

 void ReadCallbackForGetData(IAsyncResult ar) {
            try
            {
                //object[] par = (object[])ar.AsyncState;
                HttpWebRequest request = ar.AsyncState as HttpWebRequest;
                if (request != null)
                {
                    HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse;
                    System.IO.Stream streamResponse = response.GetResponseStream();

                    System.IO.StreamReader streamReader =
                        new System.IO.StreamReader(streamResponse, System.Text.Encoding.UTF8);
                    string strResult = streamReader.ReadToEnd();

                    allDone.Set();
                }
            }
            catch (Exception err) {
                MessageBox.Show(err.Message);
            }
        }

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

猫烠⑼条掵仅有一顆心 2021-11-19 18:20:39


HttpWebRequest不是这样玩的哦。

累赘 2021-11-19 18:08:00

建议使用WebClient来完成你需要的功能。还有就是现在OSChina.net也有WP7客户端了,你可以试一下
http://www.oschina.net/mobile

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文