0

例如,如果我在 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 值。

这就是它应该去的吗?

4

2 回答 2

0

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

于 2013-09-05T17:44:45.367 回答
0

这就是它应该去的吗?

是的。工作完成后,它将调用您传递的回调函数。请参阅“异步编程模型 (APM)”。从 .Net 4.5 / c# 5.0 开始,您可以使用async/await这有助于更简单地编写异步代码。

var stream = await request.GetRequestStreamAsync();
//...do some work using that stream
于 2013-09-05T17:16:40.633 回答