Windows Phone 8中Httpwebrequest POST中的执行流程

时间:2013-09-05 16:50:41

标签: c# windows-phone-8 httpwebrequest

如果我在Windows Phone 8中有此代码,例如

    string __retS = null;

    private String postRequest(String url, String postData)
    {
        byte[]byteData = Encoding.UTF8.GetBytes(postData);
        HttpWebRequest request = null;

            try
            {
                Uri uri = new Uri(url);
                request = (HttpWebRequest)WebRequest.Create(uri);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = byteData.Length;

                // start the asynchronous operation
                request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);

            } // end try
            catch (Exception)
            {
            }
            return __retS;
        }

我在这一行request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);上放了一个断点。我希望执行会跳转到我的GetRequestStreamCallback方法,但事实并非如此。它继续执行return语句,因此总是返回null值。

这应该是怎么回事?

2 个答案:

答案 0 :(得分:0)

  

这应该是怎么回事?

是。完成工作后,它将调用您传递的回调函数。见"Asynchronous Programming Model (APM)"。从.Net 4.5 / c#5.0开始,您可以使用async/await来帮助更简单地编写异步代码。

var stream = await request.GetRequestStreamAsync();
//...do some work using that stream

答案 1 :(得分:0)

回调是异步执行的,这意味着在分配异步方法后代码将继续执行。 (request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
WebRequest完成后,执行GetRequestStreamCallback。 因为如果此请求是同步的,UI线程将被阻止,因此windows phone sdk仅提供异步请求。