説明: 複数の画像を連続してダウンロードし、HttpWebRequest を使用して IsolatedStorage に保存しています。すべての画像のダウンロードが完了したら、ユーザーを別のページに移動する必要があります。このページでは、分離ストレージから画像コントロールに画像が表示されます。
質問: ナビゲーションを実行するためのすべてのダウンロードが完了したことをどのように知ることができますか?
画像を保存した後、最後の 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);
}));
}
}