2017-02-21 33 views
0

BitmapFrameをWPFで非同期で作成する方法を知っている人は誰ですか?BitmapFrameを非同期で非同期メソッドで作成する

Sourceプロパティが設定されたコードが背後にあるXAML Image要素を一括印刷します。ここでLogoImageUrlは、非同期にロードしたいWeb画像のURLです。

LogoImage.Source = BitmapFrame.Create(new Uri(LogoImageUrl)); 

は、私はこのようなasyncメソッドを作成することができます。

public async Task<BitmapFrame> GetBitmapFrame(Uri uri) 
{ 
    await ... // What to be awaited? 

    return BitmapFrame.Create(uri); 
} 

...ので、私はtryブロック内でそのメソッドを使用して、finallyブロックでそれを印刷することができますか?

+1

あなたはの[のisAsync](https://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync(V = vs.110).aspxの)プロパティを使用することができますそれを達成するためのバインディング。 – Sinatr

+0

ローカルまたはリモートの(Web)イメージファイルをロードしていますか? – Clemens

+0

@Clemensウェブ画像を読み込みたいです。 –

答えて

1

あなたは非同期Webイメージをダウンロードし、ダウンロードしたバッファからBitmapFrameを作成する必要があります。上記の例ではBitmapFrame.Createコールが凍結BitmapFrameを返すので、あなたはまた、非同期BitmapFrameを作成することもでき

public async Task<BitmapFrame> GetBitmapFrame(Uri uri) 
{ 
    var httpClient = new System.Net.Http.HttpClient(); 
    var buffer = await httpClient.GetByteArrayAsync(uri); 

    using (var stream = new MemoryStream(buffer)) 
    { 
     return BitmapFrame.Create(
      stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
    } 
} 

(私はそれが必要だとは思わないが)。

public async Task<BitmapFrame> GetBitmapFrame(Uri uri) 
{ 
    var httpClient = new System.Net.Http.HttpClient(); 
    var buffer = await httpClient.GetByteArrayAsync(uri); 

    return await Task.Run(() => 
    { 
     using (var stream = new MemoryStream(buffer)) 
     { 
      return BitmapFrame.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 
     } 
    }); 
} 
+0

Duh、どうすればHttpClientを考えることができないのですか...ありがとう、それは動作します! –

関連する問題