2012-05-09 3 views
1

Описание: У меня есть несколько последовательных загрузок изображений и сохранение в 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); 
     })); 
    } 
} 

ответ

1

Вы должны подготовить переменную целого типа для записи изображений, которые будут downloaded.Whenever изображение загружается, сделать переменную минус 1 до тех пор пока его значение равно 0, и уведомляет об этом навигационная операция.

+1

Чтобы избежать проблем с одновременным доступом, вы должны использовать Interlocked.Decrement (http://msdn.microsoft.com/en-us/library/1z4b2e5y%28v=vs.95%29.aspx). 'if (Interlocked.Decrement (ref counter) == 0) Notify();' –

Смежные вопросы