我有一个Windows Phone 7应用程序(基于Silverlight),它发送Web请求并接收Web响应。它工作正常 - 我使用 BeginGetReponse 和 AsyncCallback 来调用 EndGetResponse 。
但是,我需要等待响应完全接收,以便我可以使用响应中的数据填充集合。
等待操作完成的最佳方法是什么?
答案 0 :(得分:3)
在致电EndGetResponse后,您应该在回调中填写数据:
request.BeginGetResponse(
asyncResult =>
{
var response = request.EndGetResponse(asyncResult);
// fill in your data here
},
null);
如果您需要在UI线程上填写数据,可以返回UI线程,如下所示:
var sc = System.Threading.SynchronizationContext.Current;
request.BeginGetResponse(
asyncResult =>
{
var response = request.EndGetResponse(asyncResult);
sc.Post(o =>
{
// fill in your data here
}, null);
},
null);
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.endgetresponse.aspx有更详细的样本。
答案 1 :(得分:2)
您可以将HttpWebRequest对象的AllowReadStreamBuffering属性设置为true,在这种情况下,一旦整个响应可用,就会调用BeginGetResponse回调。
请注意,在所有情况下,请求都在后台处理,与AllowReadStreamBuffering的值无关。这意味着request.BeginGetResponse(...)将始终立即返回,并且稍后将在另一个线程中调用其回调。正如Mitya所建议的那样,您可以使用SynchronizationContext(或Deployment.Current.Dispatcher)来更新您的UI。