如果我在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值。
这应该是怎么回事?
答案 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仅提供异步请求。