2010-09-11 48 views
1

我有一個Windows Phone 7應用程序(基於Silverlight的)發送一個Web請求並接收一個Web響應。它工作正常 - 我使用BeginGetReponseAsyncCallback致電EndGetResponse等待響應被完全接收

但是,我需要等待響應被完全接收,以便我可以使用響應中的數據填充集合。

等待操作完成的最佳方式是什麼?

回答

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有更詳細的示例。

2

您可以將HttpWebRequest對象的AllowReadStreamBuffering屬性設置爲true,在這種情況下,一旦整個響應可用,將調用BeginGetResponse回調。

請注意,請求在所有情況下均在後臺處理,與AllowReadStreamBuffering的值無關。這意味着request.BeginGetResponse(...)將始終立即返回,並且稍後將在另一個線程中調用其回調。正如Mitya所建議的那樣,您可以使用SynchronizationContext(或Deployment.Current.Dispatcher)更新您的UI。