1

UI スレッドの URI から BitmapImage をダウンロードすると、アプリケーションがハングアップします。これを避けるために、別のスレッドで BitmapImage をダウンロードしようとしています。TPL で簡単にできるかどうか知りたいです。

私の現在の方法は次のとおりです。

            Task.Factory.StartNew<BitmapImage>(() => new BitmapImage(myUri) { CacheOption = BitmapCacheOption.OnLoad }, CancellationToken.None, TaskCreationOptions.None, new StaTaskScheduler(1))
        .ContinueWith(t => image1.Source = t.Result, TaskScheduler.FromCurrentSynchronizationContext());

これに関する問題はもちろん、BitmapImage が Image と同じスレッドで作成されていないという事実です。

URI から読み込まれた BitmapImage は凍結できないため、正常に動作しません。

現在、私が考えることができる最も簡単な方法は、URI からストリームを作成し、そのストリームからビットマップをロードして、返す前にフリーズすることです。それは私が信じている本当に肥大化したコードを作成するはずです。

Web から画像を表示しようとしているときに、コードを小さく (より) 読みやすくする方法はありますか?

4

1 に答える 1

2

画像が XAML ファイルにあり、バインドを使用して読み込む場合は、IsAsynctrue に設定して非同期でダウンロードします。

もちろん、画像が表示される前にフォールバック プレースホルダーを提供することをお勧めします。それを行う 1 つの方法は、 を使用することPriorityBindingです。

プログラムで行う必要がある場合は、非同期の ImageSource を作成してから、それに BitmapImage のソースを設定してみてください。

于 2011-03-29T11:11:28.313 に答える