Загрузка изображения в фоновом потоке в WPF

На этом сайте и на других форумах уже есть множество вопросов по этому поводу, но я еще не нашел решения это действительно работает.

Вот что я хочу сделать:

  • В моем приложении WPF я хочу загрузить изображение.
  • Изображение взято из произвольного URI в Интернете.
  • Изображение может быть в любом формате.
  • Если я загружаю одно и то же изображение более одного раза, я хочу использовать стандартный интернет-кеш Windows.
  • Загрузка и декодирование изображений должны происходить синхронно, но не в потоке пользовательского интерфейса.
  • В конце концов у меня должно получиться кое-что, что я могу применить к свойству источника .

Что я пробовал:

  • Использование WebClient.OpenRead () в BackgroundWorker. Работает нормально, но не использует кеш. WebClient.CachePolicy влияет только на этот конкретный экземпляр WebClient.
  • Использование WebRequest в Backgroundworker вместо WebClient и установка WebRequest.DefaultCachePolicy. Это правильно использует кеш, но я не видел примера, который бы не выдавал мне искаженные изображения в половине случаев.
  • Создание BitmapImage в BackgroundWorker, установка BitmapImage.UriSource и попытка обработки BitmapImage.DownloadCompleted. Кажется, что это использует кеш, если установлен BitmapImage.CacheOption, но, похоже, нет возможности обработать DownloadCompleted, поскольку BackgroundWorker немедленно возвращается.

Я боролся с этим постоянно в течение нескольких месяцев и начинаю думать, что это невозможно, но ты, наверное, умнее меня. Как вы думаете?

18
задан Josh Santangelo 25 March 2011 в 23:09
поделиться