2

説明: 複数の画像を連続してダウンロードし、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);
        }));
    }
}
4

1 に答える 1

1

ダウンロードする画像を記録する int 型の変数を用意しておきます。画像をダウンロードするたびに、変数の値が 0 になるまでマイナス 1 にして、ナビ操作に通知します。

于 2012-05-09T08:36:44.933 に答える