所以我在这里,从一些网络教程获得一些帮助并执行以下异步调用。我想从以下异步调用返回UserInfo类型的对象。但是我不确定在request.BeginResponse()之后程序是如何流动的。是否类似于UserInfo类型的附加ref参数可以传递给回调方法?
UserInfo GetUserInfoAsync()
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Credentials = new NetworkCredential("myID", "myPWD");
request.Method = "GET";
request.Accept = "application/json";
object data = new object();
RequestState state = new RequestState(request, data, url);
IAsyncResult asr = request.BeginGetResponse(new AsyncCallback(myCallback), state);
return null; //Need guidence here;
}
private static void myCallback(IAsyncResult result)
{
RequestState state = (RequestState)result.AsyncState;
WebRequest request = (WebRequest)state.Request;
HttpWebResponse response =(HttpWebResponse)request.EndGetResponse(result);
Stream s = response.GetResponseStream();
StreamReader readStream = new StreamReader(s);
string dataString = readStream.ReadToEnd();
response.Close();
s.Close();
readStream.Close();
UserInfo ui = ParseJSON(dataString );
}
答案 0 :(得分:1)
您的GetUserInfoAsync
方法将在请求完成之前返回。这就是异步的意思。您需要使用刚刚收到的UserInfo
对您的回调采取适当的措施 - 例如回调到UI线程(使用Dispatcher
)来更新UI。
你可以让你的GetUserInfo
来电等待,直到得到结果 - 但你基本上不应该这样做。异步调用的重点是避免阻塞。
答案 1 :(得分:0)
您需要处理回调中的数据。如果需要从初始方法调用返回用户信息,则需要同步操作。在操作完成之前,无法获得该信息。
答案 2 :(得分:0)
return null; //Need guidence here;
此时您无法返回任何有意义的内容。使用来自回调的事件来通知结果已准备就绪。