我有一個Windows Phone 7應用程序(基於Silverlight的)發送一個Web請求並接收一個Web響應。它工作正常 - 我使用BeginGetReponse和AsyncCallback致電EndGetResponse。等待響應被完全接收
但是,我需要等待響應被完全接收,以便我可以使用響應中的數據填充集合。
等待操作完成的最佳方式是什麼?
我有一個Windows Phone 7應用程序(基於Silverlight的)發送一個Web請求並接收一個Web響應。它工作正常 - 我使用BeginGetReponse和AsyncCallback致電EndGetResponse。等待響應被完全接收
但是,我需要等待響應被完全接收,以便我可以使用響應中的數據填充集合。
等待操作完成的最佳方式是什麼?
你應該在你的數據填寫您的回調,你叫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有更詳細的示例。
您可以將HttpWebRequest對象的AllowReadStreamBuffering屬性設置爲true,在這種情況下,一旦整個響應可用,將調用BeginGetResponse回調。
請注意,請求在所有情況下均在後臺處理,與AllowReadStreamBuffering的值無關。這意味着request.BeginGetResponse(...)將始終立即返回,並且稍後將在另一個線程中調用其回調。正如Mitya所建議的那樣,您可以使用SynchronizationContext(或Deployment.Current.Dispatcher)更新您的UI。