2012-05-09 57 views
1

描述: 我有多个连续的图像下载并使用HttpWebRequest保存在IsolatedStorage中。 完成所有图像下载之后,我需要将用户导航到另一个页面,其中图像显示在独立存储的图像控件中。WP7 HttpWebRequest如何知道多个请求何时完成?

问题: 我怎么能知道当所有的下载完成运行的导航?

我试图重定向传递给在最后的foreach请求回调函数(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

你应该准备一个int型变量来记录您的图像,这将是一个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();' –

相关问题