Описание: У меня есть несколько последовательных загрузок изображений и сохранение в IsolatedStorage с использованием HttpWebRequest. После завершения загрузки изображений мне нужно перейти на другую страницу, где изображения отображаются в элементах управления изображением из изолированного хранилища.WP7 HttpWebRequest, как узнать, когда завершено несколько запросов?
Вопрос: Как узнать, когда все загрузки будут завершены для запуска навигации?
Я пытался передать редирект функции запросов обратного вызова (requestImage_BeginGetResponse()) в последнем Еогеаспе цикл итерации после сохранения изображения, но изображения различных размеров, а иногда и последние загрузки изображения быстрее, чем предыдущий, что результаты в перенаправлении до завершения всех загрузок.
код:
private HttpWebRequest request;
private void downloadDataFile()
{
...
foreach (Gallery image in gallery)
{
request = (HttpWebRequest)WebRequest.Create(image.url);
request.BeginGetResponse(new AsyncCallback(requestImage_BeginGetResponse), new object[] { request, image.name });
}
}, request);
}
private void requestImage_BeginGetResponse(IAsyncResult r)
{
object[] param = (object[])r.AsyncState;
HttpWebRequest httpRequest = (HttpWebRequest)param[0];
string filename = (string)param[1];
HttpWebResponse httpResoponse = (HttpWebResponse)httpRequest.EndGetResponse(r);
System.Net.HttpStatusCode status = httpResoponse.StatusCode;
if (status == System.Net.HttpStatusCode.OK)
{
Stream str = httpResoponse.GetResponseStream();
Deployment.Current.Dispatcher.BeginInvoke(new Action(() =>
{
saveImage(str, filename);
}));
}
}
Чтобы избежать проблем с одновременным доступом, вы должны использовать Interlocked.Decrement (http://msdn.microsoft.com/en-us/library/1z4b2e5y%28v=vs.95%29.aspx). 'if (Interlocked.Decrement (ref counter) == 0) Notify();' –