0

編集:申し訳ありません-問題をもう少しよく理解したので、私の問題は別の場所にあると思います

2 つの非同期リクエストがあります。

最初はこれです:

public void DownloadWebData(Uri apiUrl)
{
    WebClient client = new WebClient();
    client.DownloadDataCompleted += DownloadDataCompleted;
    client.DownloadDataAsync(apiUrl);
}

public void DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
    string result = System.Text.Encoding.UTF8.GetString (e.Result);
    Uri downloadLink = (GetUri(result));
}

基本的には、HTTP 経由でいくつかの基本的なテキスト データを返すリモート Web サーバーへの単純な URL ベースの API 要求を作成します。GetUri() は、そのデータを解析して、画像をダウンロードするためにデータからアドレスを抽出するだけです。

次に、monotouch.dialog で imageLoader を使用して画像をダウンロードします。すべてのコードは同じクラスにあります。

編集:imageLoaderコードを追加しました(コメントとして十分に機能するため、コンソール行を残しました)。

public void downloadImage (Uri imageUri) 
{
    var tmp_img = ImageLoader.DefaultRequestImage (imageUri, this);

    if (tmp_img != null)
    {
        adView.Image = tmp_img;
        Console.WriteLine ("Image already cached, displaying");
    }
    else
    {
        adView.Image = UIImage.FromFile ("Images/downloading.jpg");
        Console.WriteLine ("Image not cached.  Using placeholder.");
    }
}

public void UpdatedImage (System.Uri uri) 
{
    adView.Image = ImageLoader.DefaultRequestImage(uri, this);
}
4

3 に答える 3

0

for ループ内で DownloadWebData を使用している場合は、DownloadDataCompleted イベント用に別の関数を生成することをお勧めします。DownloadWebData() 内で無名関数を使用できます。

client.DownloadDataCompleted +=(s,e)=>{
    string result = System.Text.Encoding.UTF8.GetString (e.Result);
    Uri downloadLink = (GetUri(result));
};
于 2013-07-14T09:15:10.297 に答える
0

私が間違った質問をしていることに気づいた後、私は最終的にここでそれを理解しました:

非同期イメージのダウンロード後に制御をメイン UI スレッドに戻して UI を更新する

于 2013-07-14T10:00:23.867 に答える
0

e.Result実際に何かが含まれているかどうかを確認できませんでした。ダウンロードも失敗した可能性がありe.Resultnull. 基本的なエラー処理をコードに追加します。

于 2013-07-14T08:43:48.350 に答える