等待响应完全接收

时间:2010-09-11 04:32:52

标签: .net silverlight windows-phone-7 webrequest wait

我有一个Windows Phone 7应用程序(基于Silverlight),它发送Web请求并接收Web响应。它工作正常 - 我使用 BeginGetReponse AsyncCallback 来调用 EndGetResponse

但是,我需要等待响应完全接收,以便我可以使用响应中的数据填充集合。

等待操作完成的最佳方法是什么?

2 个答案:

答案 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。