1
説明: HttpWebRequestを使用して、IsolatedStorageに複数のイメージを連続してダウンロードして保存しています。 すべての画像のダウンロードが完了したら、ユーザーを別のページに移動する必要があります。別のページには、隔離されたストレージの画像コントロールに画像が表示されます。WP7 HttpWebRequest複数のリクエストが完了したときを知る方法?
質問: ナビゲーションを実行するためにすべてのダウンロードが完了したら、どうすればわかりますか?
画像を保存した後、最後のforeachループの繰り返しで要求コールバック関数(requestImage_BeginGetResponse())にリダイレクトしようとしましたが、画像のサイズが異なります。すべてのダウンロードが完了する前にリダイレクトします。
コード:あなたは、downloaded.Whenever画像がダウンロードされるだろう、あなたの画像を記録するためにint型の変数を用意し、その値が0である刚性変数マイナス1を作成し、通知しなければならない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();' –